Rätt (men observera att IN
är en operator, inte en klausul och det fungerar så här i SQL i allmänhet, inte bara för Oracle).
where 1 not in (null,1)
motsvarar:
where 1 != null and 1 != 1
som egentligen borde skrivas som:
WHERE 1 NOT IN (NULL, 1)
och
WHERE 1 <> NULL AND 1 <> 1
vilket är detsamma som:
WHERE (1 <> NULL) AND (1 <> 1)
som utvärderar till:
WHERE UNKNOWN AND FALSE
och vidare som:
WHERE FALSE
Så det returnerar korrekt inga rader.
Observera att om du hade WHERE 1 NOT IN (NULL, 2)
, skulle det utvärderas till WHERE UNKNOWN
(kvar som en övning) och inga rader skulle heller returneras.