Klauzula NOT IN i wartości NULL

Ten problem pojawił się, gdy otrzymałem różne rekordy, które uważałem za identyczne zapytania z użyciemnot in where ograniczenie, a drugie aleft join. Tabela wnot in ograniczenie miało jedną wartość pustą (złe dane), która spowodowała, że ​​zapytanie zwróciło liczbę 0 rekordów. W pewnym sensie rozumiem dlaczego, ale mógłbym skorzystać z pomocy, aby w pełni zrozumieć koncepcję.

Aby to po prostu powiedzieć, dlaczego zapytanie A zwraca wynik, ale B nie?

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

To było na SQL Server 2005. Znalazłem także to wywołanieset ansi_nulls off powoduje, że B zwraca wynik.

questionAnswers(11)

yourAnswerToTheQuestion