Oracle
 sql >> Base de données >  >> RDS >> Oracle

Comment fonctionne la clause 'in' dans Oracle

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.