Правилно (но имайте предвид, че IN
е оператор, а не клауза и работи по този начин в SQL като цяло, не само за Oracle).
where 1 not in (null,1)
е еквивалентен на:
where 1 != null and 1 != 1
което наистина трябва да бъде записано като:
WHERE 1 NOT IN (NULL, 1)
и
WHERE 1 <> NULL AND 1 <> 1
което е същото като:
WHERE (1 <> NULL) AND (1 <> 1)
което се оценява на:
WHERE UNKNOWN AND FALSE
и по-нататък като:
WHERE FALSE
Така че правилно не връща редове.
Забележете, че ако сте имали WHERE 1 NOT IN (NULL, 2)
, ще се оцени като WHERE UNKNOWN
(оставено като упражнение) и също няма да бъдат върнати редове.