12.01.2012

Специфика not in (null)

Почему лучше использовать exists вместо not in.

Булевые операторы с null работают следующим образом:
  • null AND false = false
  • false AND null = false
  • null AND true = null
  • true AND null = null
  • null OR true = true
  • true OR null = true
  • null OR false = null
  • false OR null = null
Пример: запрос не возвратит ни одной записи
select * from dual
where 1 not in (select 2 from dual union select null from dual)

1 NOT IN (2, null) => (1!=2) AND (1!=null) => true AND null => null;

Комментариев нет :