Korrekt (men bemærk at IN
er en operator, ikke en klausul, og det fungerer sådan i SQL generelt, ikke kun for Oracle).
where 1 not in (null,1)
svarer til:
where 1 != null and 1 != 1
som egentlig burde skrives som:
WHERE 1 NOT IN (NULL, 1)
og
WHERE 1 <> NULL AND 1 <> 1
hvilket er det samme som:
WHERE (1 <> NULL) AND (1 <> 1)
som evaluerer til:
WHERE UNKNOWN AND FALSE
og yderligere som:
WHERE FALSE
Så det returnerer korrekt ingen rækker.
Bemærk, at hvis du havde WHERE 1 NOT IN (NULL, 2)
, ville det evaluere til WHERE UNKNOWN
(efterladt som en øvelse), og der ville heller ikke blive returneret rækker.