Oracle
 sql >> Base de Dados >  >> RDS >> Oracle

Como a cláusula 'in' funciona no oracle


Correto (mas observe que IN é um operador, não uma cláusula e funciona assim no SQL em geral, não apenas no Oracle).
where 1 not in (null,1)

é equivalente a:
where 1 != null and 1 != 1

que realmente deve ser escrito como:
WHERE 1 NOT IN (NULL, 1)

e
WHERE 1 <> NULL AND 1 <> 1

que é o mesmo que:
WHERE (1 <> NULL) AND (1 <> 1)

que avalia para:
WHERE UNKNOWN AND FALSE

e ainda como:
WHERE FALSE

Portanto, ele não retorna corretamente nenhuma linha.

Observe que se você tivesse WHERE 1 NOT IN (NULL, 2) , seria avaliado como WHERE UNKNOWN (deixado como exercício) e nenhuma linha também seria retornada.