SQL / JOIN usando o vs JOIN ON

Bem, isto provavelmente é apenas uma questão de estilo, mas eu realmente gostaria de aprender um pouco mais sobre a diferença entreJOIN 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.

 0
Author: Bruno Zamengo, 2017-08-06

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 joins 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.

 1
Author: Gordon Linoff, 2017-08-06 11:56:36