Cláusula NOT IN y valores NULL

Este problema surgió cuando obtuve diferentes registros para lo que pensé que eran consultas idénticas, una utilizando unnot in where restricción y la otra unaleft join. La mesa en elnot in La restricción tenía un valor nulo (datos incorrectos) que hizo que la consulta devolviera un conteo de 0 registros. En cierto modo comprendo por qué, pero podría necesitar alguna ayuda para comprender completamente el concepto.

Para decirlo simplemente, ¿por qué la consulta A devuelve un resultado pero B no?

A: select 'true' where 3 in (1, 2, 3, null)
B: select 'true' where 3 not in (1, 2, null)

Esto fue en SQL Server 2005. También encontré que llamandoset ansi_nulls off hace que B devuelva un resultado.

Respuestas a la pregunta(11)

Su respuesta a la pregunta