У меня есть таблица NUMS с одним столбцом n.
И я заполняю значения 1,2,3,4,5, ноль в нем.
Теперь запрос
SELECT n FROM Nums
WHERE n IN (1, 2, null)
В этом случае, я думаю, он конвертируется в
SELECT n FROM Nums
Where n = 1 OR n = 2 OR n = null
Я также сравниваю n с нулевым значением, которое должно давать неизвестное, и оно должно возвращать пустой набор. Но оно возвращает 1,2 (ноль не возвращается, хотя включено в оператор IN)
Теперь запрос
SELECT n FROM Nums WHERE n NOT IN(1, 2, null)
... преобразуется в:
SELECT n FROM Nums
Where n!=1 AND n!=2 AND n!=null
Вот то, что я сказал выше, работает и ничего не возвращает.
Может кто-нибудь объяснить подробно, что происходит.