Aprendi em minhas aulas de MSSQL, é assim que se juntam duas tabelas
select * from FirstTable A JOIN SecondTable B on A.ID= B.ID
Agora, na minha vida profissional, me deparei com consultas JOIN como esta
select * from FirstTable A, SecondTable B where A.ID=B.ID
Eu sei que a segunda opção já foi norma, mas talvez agora abandonada.
Acho que em consultas complexas em que eu junto mais de 6 tabelas + tenho várias subconsultas, o segundo formulário é muito mais fácil de entender e é curto e bonito.
Perguntas
- Qual devo usar?
- Existe alguma vantagem de um sobre o outro?
As consultas do segundo tipo se enquadram no que alguns chamam de antipadrão SQL (confira o bom livro escrito por Bill Karwin) . A segunda consulta quase se assemelha a um JOIN cartesiano cuja cláusula WHERE deve ser avaliada em tempo real.
O primeiro é mais limpo e a ordem de execução pode ser melhor gerenciada.
Você pode comparar as duas maneiras por
É melhor usar a sintaxe JOIN porque você pode gerar conjuntos de resultados com LEFT JOINs e RIGHT JOINs que podem ser muito diferentes (talvez mais desejáveis do que) INNER JOINs.
Esta postagem do SO tem uma boa explicação das diferenças na reclamação do ANSI SQL.
Embora ambas as consultas produzam o mesmo resultado, acho que é sempre uma boa ideia declarar explicitamente seus JOINs. É muito mais fácil de entender, especialmente em consultas que contêm avaliações não relacionadas a JOIN na cláusula WHERE.
Declarar explicitamente seus JOINs também evita que você produza inadvertidamente um produto cartesiano (como RolandoMySQLSBA aludiu). Em sua segunda consulta acima, se você (por qualquer motivo) esqueceu de incluir sua cláusula WHERE, sua consulta seria executada sem condições JOIN e retornaria um conjunto de resultados de cada linha em FirstTable correspondente a cada linha em SecondTable. Além de não retornar o que você deseja, se você cometer um erro como esse com tabelas grandes (com centenas de milhares ou até milhões de linhas) poderá causar alguns problemas de desempenho enquanto o banco de dados tenta atender a essa consulta.
Você deseja usar a primeira sintaxe. A segunda sintaxe é obsoleta e, em alguns casos (situações estranhas de junção externa), pode funcionar incorretamente.