Correct (mais notez que IN
est un opérateur, pas une clause et cela fonctionne comme ça dans SQL en général, pas seulement pour Oracle).
where 1 not in (null,1)
est équivalent à :
where 1 != null and 1 != 1
qui devrait vraiment s'écrire :
WHERE 1 NOT IN (NULL, 1)
et
WHERE 1 <> NULL AND 1 <> 1
qui est identique à :
WHERE (1 <> NULL) AND (1 <> 1)
qui évalue à :
WHERE UNKNOWN AND FALSE
et plus loin comme :
WHERE FALSE
Ainsi, il ne renvoie correctement aucune ligne.
Notez que si vous aviez WHERE 1 NOT IN (NULL, 2)
, il serait évalué à WHERE UNKNOWN
(laissé en exercice) et aucune ligne ne serait renvoyée non plus.