Предложения NOT IN и значения NULL - PullRequest
225 голосов
/ 24 сентября 2008

Эта проблема возникла, когда я получил различное количество записей для идентичных запросов, один из которых использовал ограничение not in where, а другой - left join. Таблица в ограничении not in имела одно нулевое значение (неверные данные), в результате чего этот запрос возвращал количество записей 0. Я вроде понимаю, почему, но я мог бы использовать некоторую помощь, чтобы полностью понять концепцию.

Проще говоря, почему запрос A возвращает результат, а B - нет?

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

Это было на SQL Server 2005. Я также обнаружил, что вызов set ansi_nulls off заставляет B вернуть результат.

Ответы [ 11 ]

0 голосов
/ 25 сентября 2008

также это может быть полезно, чтобы узнать логическое различие между объединением, существует и в http://weblogs.sqlteam.com/mladenp/archive/2007/05/18/60210.aspx

...