Non uso la sintassi USING, poiché
- la maggior parte dei miei join non è adatta (non lo stesso nome di campo che viene abbinato e/o più corrispondenze nel join) e
- non è immediatamente ovvio cosa si traduce nel caso con più di due tabelle
cioè supponendo 3 tabelle con le colonne 'id' e 'id_2', fa
T1 JOIN T2 USING(id) JOIN T3 USING(id_2)
diventare
T1 JOIN T2 ON(T1.id=T2.id) JOIN T3 ON(T1.id_2=T3.id_2 AND T2.id_2=T3.id_2)
o
T1 JOIN T2 ON(T1.id=T2.id) JOIN T3 ON(T2.id_2=T3.id_2)
o qualcos'altro ancora?
Scoprirlo per una particolare versione del database è un esercizio abbastanza banale, ma non ho molta certezza che sia coerente in tutti i database e non sono l'unica persona che deve mantenere il mio codice (quindi il anche altre persone dovranno essere consapevoli di cosa equivale).
Un'ovvia differenza con WHERE e ON è se il join è esterno:
Assumendo un T1 con un campo ID singolo, una riga contenente il valore 1 e un T2 con un campo ID e VALUE (una riga, ID=1, VALUE=6), otteniamo:
SELECT T1.ID, T2.ID, T2.VALUE FROM T1 LEFT OUTER JOIN T2 ON(T1.ID=T2.ID) WHERE T2.VALUE=42
non fornisce righe, poiché WHERE deve corrispondere, mentre
SELECT T1.ID, T2.ID, T2.VALUE FROM T1 LEFT OUTER JOIN T2 ON(T1.ID=T2.ID AND T2.VALUE=42)
darà una riga con i valori
1, NULL, NULL
poiché l'ON è richiesto solo per la corrispondenza del join, che è facoltativo poiché è esterno.