No MySQL, a escrita JOINnão qualificada implica INNER JOIN. Em outras palavras, o INNERin INNER JOINé opcional. INNERe CROSSsão sinônimos no MySQL. Para maior clareza eu escrevo JOINou INNER JOINse eu tiver uma condição de junção e CROSS JOINse eu não tiver uma condição.
A sintaxe permitida para junções é descrita na documentação .
No momento, estou pensando que um JOIN autônomo nada mais é do que (idêntico a) usar vírgulas e cláusulas WHERE.
O efeito é o mesmo, mas a história por trás deles é diferente. A sintaxe da vírgula é do padrão ANSI-89. No entanto, há vários problemas com essa sintaxe, portanto, no padrão ANSI-92, a palavra-chave JOIN foi introduzida.
Eu recomendo fortemente que você sempre use a sintaxe JOIN em vez da vírgula.
T1 JOIN T2 ON ...é mais legível do que T1, T2 WHERE ....
É mais fácil de manter porque os relacionamentos e os filtros da tabela são claramente definidos, em vez de misturados.
A sintaxe JOIN é mais fácil de converter em OUTER JOIN do que a sintaxe de vírgula.
Misturar a vírgula e a sintaxe JOIN na mesma instrução pode gerar erros curiosos devido às regras de precedência.
É menos provável criar acidentalmente um produto cartesiano ao usar a sintaxe JOIN devido a uma cláusula de junção esquecida, porque as cláusulas de junção são escritas ao lado das junções e é fácil ver se alguma está faltando.
Legal, obrigado por esclarecer essa questão simples para mim :) No passado eu sempre usei vírgulas + cláusulas where ... mas irei converter para o uso de JOINs de acordo com seus conselhos. Obrigado
Quang Van
Ei, Mark, o que você quer dizer com combinações de JOIN e vírgulas. Misture consultas como esta, SELECT * FROM t1 LEFT JOIN (t2, t3, t4) ON (t2.a = t1.a AND t3.b = t1.b AND t4.c = t1.c)?
Quang Van
2
@Quang: Isso, por exemplo, irá falhar:SELECT * FROM t1, t2 JOIN t3 ON t1.x=t3.y WHERE t1.a = t2.b
Mark Byers
0
Todos eles são equivalentes e também iguais a CROSS JOIN,.
Existem algumas diferenças entre o uso de vírgula e [INNER | CROSS] JOINsintaxe, o que pode ser importante ao juntar mais tabelas. Praticamente tudo que você precisa saber está descrito aqui na documentação do MySQLJOIN .
SELECT * FROM t1, t2 JOIN t3 ON t1.x=t3.y WHERE t1.a = t2.b
Todos eles são equivalentes e também iguais a
CROSS JOIN
,.Existem algumas diferenças entre o uso de vírgula e
[INNER | CROSS] JOIN
sintaxe, o que pode ser importante ao juntar mais tabelas. Praticamente tudo que você precisa saber está descrito aqui na documentação do MySQLJOIN
.fonte