Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Oracle Новый топик    Ответить
 Вопрос по основам - NULL (IN, NOT IN)  [new]
ToKnowSQL
Guest
Привет всем!

Ребят поясните, пожалуйста, почему, когда в результирующем множестве присутствует NULL и используется оператор IN, то запрос отрабатывает.
А стоит поставить ему отрицание NOT, то запрос не отрабатывает? Получается, что в случае отрицания, если встречается NULL, то подзапрос сразу возвращает NULL?

select dummy from dual 
       where 1 in (select 1 from dual 
                   union 
                   select null from dual)

---- Выводит X


select dummy from dual 
       where 1 not in (select 2 from dual 
                   union 
                   select null from dual)

---- Пусто
19 июн 17, 15:11    [20574850]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос по основам - NULL (IN, NOT IN)  [new]
Elic
Member

Откуда:
Сообщений: 29976
RTFM IN Condition (FAQ)
+
SELECT 'True' FROM employees
WHERE department_id NOT IN (10, 20, NULL);
The preceding example returns no rows because the WHERE clause condition evaluates to:
department_id != 10 AND department_id != 20 AND department_id != null
19 июн 17, 15:16    [20574880]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос по основам - NULL (IN, NOT IN)  [new]
SQL*Plus
Member

Откуда: Россия, Москва
Сообщений: 8129
+ там же
https://docs.oracle.com/cd/E11882_01/server.112/e41084/conditions013.htm#SQLRF52169
NOT IN 
Equivalent to !=ALL. 
Evaluates to FALSE if any member of the set is NULL.


Желтым выделил приведенное в документации неправильное,
но доходчивое объяснение (для самых непонятливых?!).

Помним, что в выборку попадают только те строки,
для которых результат вычисления условия фразы WHERE дает TRUE
не FALSE? и не UNKNOWN (NULL)!
19 июн 17, 15:49    [20575037]     Ответить | Цитировать Сообщить модератору
Все форумы / Oracle Ответить