НЕ В ПРОТИВ НЕ СУЩЕСТВУЕТ

Также имейте в виду, что sql-syntax NOT IN не эквивалентно NOT sql EXISTS, когда дело доходит sql-statement до null.

Этот пост очень хорошо sql-server это объясняет

http://sqlinthewild.co.za/index.php/2010/02/18/not-exists-vs-not-in/

Если подзапрос sql возвращает хотя бы одно значение sql-select null, NOT IN не будет соответствовать mssql ни одному ряды.

Причину sql-query этого можно найти, подробно sql-syntax изучив, что На самом деле sql-statement означает НЕ В РАБОТЕ.

Допустим, для sql-srever наглядности в таблица с sql-syntax именем t, есть столбец с sql-select именем ID со значениями 1..4

WHERE SomeValue NOT IN (SELECT AVal FROM t)

эквивалентно

WHERE SomeValue != (SELECT AVal FROM t WHERE ID=1)
AND SomeValue != (SELECT AVal FROM t WHERE ID=2)
AND SomeValue != (SELECT AVal FROM t WHERE ID=3)
AND SomeValue != (SELECT AVal FROM t WHERE ID=4)

Далее notin предположим, что AVal имеет mssql значение NULL, где ID = 4. Следовательно,! = сравнение sql-syntax возвращает НЕИЗВЕСТНО. Таблица sql логической истинности для select-statement состояний И что НЕИЗВЕСТНО sql-server и ИСТИНА - НЕИЗВЕСТНО, НЕИЗВЕСТНО sql-server и ЛОЖЬ - ЛОЖЬ. Там есть нет notin значения, которое можно было select-statement бы использовать AND с UNKNOWN, чтобы sql-query получить результат TRUE

Следовательно, если sql-server какая-либо строка этого подзапроса notin возвращает NULL, весь NOT sql-statement IN оператор будет оценивать sql-syntax либо FALSE, либо NULL, и sql-select никакие записи не будут вернулся

sql

sql-server

notin

2022-10-14T06:50:07+00:00