Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

Em consultas MySQL, por que usar join em vez de where?


Qualquer consulta envolvendo mais de uma tabela requer alguma forma de associação para vincular os resultados da tabela "A" à tabela "B". O meio tradicional (ANSI-89) de fazer isso é:
  1. Liste as tabelas envolvidas em uma lista separada por vírgulas na cláusula FROM

  2. Escreva a associação entre as tabelas na cláusula WHERE
    SELECT *
      FROM TABLE_A a,
           TABLE_B b
     WHERE a.id = b.id
    

Aqui está a consulta reescrita usando a sintaxe ANSI-92 JOIN:
SELECT *
  FROM TABLE_A a
  JOIN TABLE_B b ON b.id = a.id

De uma perspectiva de desempenho:


Onde houver suporte (Oracle 9i+, PostgreSQL 7.2+, MySQL 3.23+, SQL Server 2000+), não há benefício de desempenho ao usar uma sintaxe sobre a outra. O otimizador os vê como a mesma consulta. Mas consultas mais complexas podem se beneficiar do uso da sintaxe ANSI-92:
  • Capacidade de controlar a ordem JOIN - a ordem em que as tabelas são verificadas
  • Capacidade de aplicar critérios de filtro em uma tabela antes de ingressar

De uma perspectiva de manutenção:


Existem inúmeras razões para usar a sintaxe ANSI-92 JOIN sobre ANSI-89:
  • Mais legível, pois os critérios JOIN são separados da cláusula WHERE
  • Menos probabilidade de perder os critérios JOIN
  • Suporte de sintaxe consistente para tipos JOIN diferentes de INNER, facilitando o uso de consultas em outros bancos de dados
  • A cláusula WHERE serve apenas como filtragem do produto cartesiano das tabelas unidas

De uma perspectiva de design:


A sintaxe ANSI-92 JOIN é padrão, não antipadrão:
  • O objetivo da consulta é mais óbvio; as colunas usadas pelo aplicativo são claras
  • Ele segue a regra de modularidade sobre o uso de tipagem estrita sempre que possível. Explícito é quase universalmente melhor.

Conclusão


Sem familiaridade e/ou conforto, não vejo nenhum benefício em continuar usando a cláusula ANSI-89 WHERE em vez da sintaxe ANSI-92 JOIN. Alguns podem reclamar que a sintaxe ANSI-92 é mais detalhada, mas é isso que a torna explícita. Quanto mais explícito, mais fácil é entender e manter.