Является ли 2 плохой синтаксис?Зачем мне это использовать?
Нет ничего плохого в том, чтобы синтаксически поместить предикат в предложение JOIN или в предложение WHERE, так или иначе работает в Oracle.Oracle на самом деле все равно:)
Логически я иногда буду использовать предложения JOIN и WHERE, чтобы большие сложные запросы стали более самодокументируемыми.Например:
SELECT dept.name, SUM(emp.salary)
FROM dept
JOIN emp
ON dept.deptno = emp.deptno
AND emp.commission IS NULL
WHERE dept.region = :region
GROUP BY dept.name;
Этот запрос имеет три предиката, один из которых является критерием соединения.Я поместил предикат emp.commission в предложении JOIN, чтобы указать другим разработчикам, что это «не подлежит обсуждению» - в контексте этого запроса этот предикат всегда должен присутствовать.Предикат dept.region находится в предложении WHERE, чтобы указать, что это критерий, предоставленный пользователем.
Это выбор стиля, правила нет, и я бы не делал это все время,Это помогает, однако, когда запрос объединяет множество таблиц и когда существуют десятки предикатов.Предложения JOIN позволяют красиво сгруппировать предикаты, в противном случае мы бы отсортировали предложение WHERE, чтобы предикаты были сгруппированы логически.