SQL / JOIN usando o vs JOIN ON
JOIN t ON <equal condition>
e JOIN t USING(<list of columns>)
.
claro que assumo que as duas tabelas têm as mesmas colunas, com o mesmo nome e os mesmos tipos de dados. Nesse caso:
- existe alguma diferença realentre os dois sintaxes?
- é a cláusula
USING
suportada em todos (ou pelo menos no mais importante) dbms s ?
já li sobre NATURAL JOIN
em w3resource.com e a seguinte pergunta sobre a cláusulaNATURAL JOIN
vs ON
, mas não parecem responder às duas perguntas anteriores...
Além disso, nem o w3resource.com EQUI JOIN
secção nor INNER JOIN
a secção menciona a "técnica"USING
.
1 answers
Na maior parte, é uma questão de estilo (e o facto de nem todas as bases de dados suportarem using
). Há uma pequena diferença. Se o fizer:
select *
from t1 join
t2
on t1.col1 = t2.col1
Então col1
aparece duas vezes no conjunto de resultados. Se o fizer:
select *
from t1 join
t2
using (col1)
Então col1
aparece apenas uma vez.
Um aspecto de using
que eu gosto é que encoraja chaves estrangeiras a terem os mesmos nomes que chaves primárias. Quando isso é possível( e nem sempre é possível), eu acho que este é um bom design que faz bases de dados mais fáceis de usar.
Existem situações em que using
podia fazer coisas inesperadas. Em longas cadeias de join
s, não especifica de onde as chaves vêm. No entanto, não acho que isso seja um problema em bases de dados bem projetadas.
Por outro lado, natural join
s são uma abominação e nunca devem ser usados. Eles não especificam as colunas que estão sendo unidas. Nem sequer respeitam relações-chave estrangeiras. Não ser claro nas colunas que estão sendo comparadas é apenas um convite para bugs no código -- bugs que podem ser muito, muito difíceis de encontrar.