Разница для меня является то, что вы можете рисовать себя в угол с ПРИМЕНЕНИЕМ пункта:
CREATE TABLE roster (mgrid INTEGER, empid INTEGER);
CREATE TABLE emp (empid INTEGER, NAME VARCHAR2(20));
INSERT INTO roster VALUES (1,10);
INSERT INTO roster VALUES (1,11);
INSERT INTO roster VALUES (1,12);
INSERT INTO roster VALUES (2,20);
INSERT INTO roster VALUES (2,21);
INSERT INTO emp VALUES (10, 'John');
INSERT INTO emp VALUES (11, 'Steve');
INSERT INTO emp VALUES (12, 'Mary');
INSERT INTO emp VALUES (20, 'Ann');
INSERT INTO emp VALUES (21, 'George');
INSERT INTO emp VALUES (1, 'Pete');
INSERT INTO emp VALUES (2, 'Sally');
SELECT r.mgrid, e2.name, e1.empid, e1.name
FROM roster r JOIN emp e1 USING(empid)
JOIN emp e2 ON r.mgrid = e2.empid;
В приведенных выше выберите, вы получаете ORA-25154, «столбец часть ИСПОЛЬЗОВАНИЯ положения не может иметь классификатор».
Если удалить e1.empid спецификатор, как в:
SELECT r.mgrid, e2.name, empid, e1.name
FROM roster r JOIN emp e1 USING(empid)
JOIN emp e2 ON r.mgrid = e2.empid;
Вы получите сообщение об ошибке ORA-00918, "столбец двусмысленно определен".
Вы должны использовать:
SELECT r.mgrid, e2.name, e1.empid, e1.name
FROM roster r JOIN emp e1 ON r.empid = e1.empid
JOIN emp e2 ON r.mgrid = e2.empid;
пример надуманный, но, когда я был первым, исследуя синтаксис я столкнулся с этой конкретной проблемы в реальной ситуации присоединиться. С тех пор я избегал предложения USING. Нет преимущества в условии USING, кроме нескольких нажатий клавиш.
Аналогичный вопрос в MySQL http://stackoverflow.com/questions/370268/whats-the-difference-between-using-and-on-in-table-joins/10250985#10250985 – nawfal