Не използвам синтаксиса USING, тъй като
- повечето от моите обединения не са подходящи за него (не е същото име на поле, което се съпоставя, и/или множество съвпадения в обединението) и
- не е очевидно веднага в какво се превежда в случая с повече от две таблици
т.е. ако приемем 3 таблици с колони 'id' и 'id_2', прави ли
T1 JOIN T2 USING(id) JOIN T3 USING(id_2)
стават
T1 JOIN T2 ON(T1.id=T2.id) JOIN T3 ON(T1.id_2=T3.id_2 AND T2.id_2=T3.id_2)
или
T1 JOIN T2 ON(T1.id=T2.id) JOIN T3 ON(T2.id_2=T3.id_2)
или пак нещо друго?
Откриването на това за конкретна версия на базата данни е доста тривиално упражнение, но нямам голяма увереност, че е последователно във всички бази данни и не съм единственият човек, който трябва да поддържа моя код (така че други хора също ще трябва да са наясно на какво е еквивалент).
Очевидна разлика с WHERE срещу ON е ако присъединяването е външно:
Ако приемем T1 с едно поле ID, един ред, съдържащ стойността 1, и T2 с поле ID и VALUE (един ред, ID=1, VALUE=6), тогава получаваме:
SELECT T1.ID, T2.ID, T2.VALUE FROM T1 LEFT OUTER JOIN T2 ON(T1.ID=T2.ID) WHERE T2.VALUE=42
не дава редове, тъй като се изисква WHERE да съвпада, докато
SELECT T1.ID, T2.ID, T2.VALUE FROM T1 LEFT OUTER JOIN T2 ON(T1.ID=T2.ID AND T2.VALUE=42)
ще даде един ред със стойностите
1, NULL, NULL
тъй като ON се изисква само за съвпадение на съединението, което не е задължително, тъй като е външно.