pasé algún tiempo tratando de averiguar por qué esta consulta no está tirando de los resultados que esperaba:¿Por qué "no existe" obra de consulta SQL y "no en" ¿no
SELECT * FROM NGS WHERE ESPSSN NOT IN (SELECT SSN FROM CENSUS)
finalmente he intentado escribir la consulta de otra forma y este terminamos conseguir los resultados esperados:
SELECT * FROM NGS n WHERE NOT EXISTS (SELECT * FROM CENSUS WHERE SSN = n.ESPSSN)
la primera consulta parece más apropiado y "correcta". Admitidos "en" y "no en" todo el tiempo para selecciona similares y nunca he tenido un problema que yo sepa.
¡Buena llamada! Acabo de verificar y hay un valor nulo en la tabla. Reescribiendo la consulta para SELECCIONAR * FROM NGS DONDE ESPSSN NO IN (SELECCIONAR ISNULL (SSN, '') DESDE CENSO) me dio el valor esperado. Me pregunto cuál debería usar? – Josh
@Josh: valor predeterminado para 'no existe' porque no sufre el' null' gotcha. Pero si usted tiene problemas de rendimiento, puede ser vale la pena examinar el plan de consulta para ambas opciones – Andomar
@ Josh, @Andomar: El ISNULL invalidará el uso de cualquier índice que puede haber sido usado antes – gbn