ASNexus | ↑ |
---|
Кстати, MSSQL в подзапросах [NOT] EXISTS игнорирует всё, что перечислено в его SELECT (может быть это регулируется параметрами - тут не скажу, не знаю), т.е. можно написать что-то вроде "where exists (select 1/0 from ...)" и это не вызовет ошибку "divisor is equal to zero".
Возможно Oracle в какой-то версии это тоже сделает (или уже сделал). Исходя из этого, я бы для проверки того, выполняется подзапрос или нет добавил бы условие в WHERE подзапроса, что-то вроде "and T2.F1 / 0 > 0" |
SQL> SELECT banner_full FROM v$version;
BANNER_FULL
-------------------------------------------------------------------------------
Oracle Database 21c Enterprise Edition Release 21.0.0.0.0 - Production
Version 21.4.0.0.0
SQL> SELECT D.department_id, D.department_name
2 FROM departments D
3 WHERE NOT EXISTS (SELECT 1/0 FROM employees E
4 WHERE D.department_id = E.department_id)
5 AND ROWNUM <= 3;
DEPARTMENT_ID DEPARTMENT_NAME
------------- ------------------------------
120 Treasury
130 Corporate Tax
140 Control And Credit
Предполагаю, что в предыдущих версиях Oracle Database было такое же поведение,
поскольку не имеет значения, что будет в списке выборки кореллированного подзапроса.
Лично я обычно там ставлю * (звездочку).