Sqlserver
 sql >> Base de Dados >  >> RDS >> Sqlserver

As consultas ANSI JOIN versus não ANSI JOIN terão um desempenho diferente?


As duas consultas são as mesmas, exceto que a segunda é a sintaxe SQL ANSI-92 e a primeira é a sintaxe SQL mais antiga que não incorporou a cláusula join. Eles devem produzir exatamente o mesmo plano de consulta interna, embora você possa verificar.

Você deve usar a sintaxe ANSI-92 por vários motivos
  • O uso da cláusula JOIN separa a lógica de relacionamento da lógica de filtro (o WHERE) e, portanto, é mais claro e fácil de entender.
  • Não importa com essa consulta específica, mas há algumas circunstâncias em que a sintaxe de junção externa mais antiga (usando + ) é ambígua e os resultados da consulta são, portanto, dependentes da implementação - ou a consulta não pode ser resolvida. Isso não ocorre com ANSI-92
  • É uma boa prática, pois a maioria dos desenvolvedores e dba's usarão o ANSI-92 hoje em dia e você deve seguir o padrão. Certamente todas as ferramentas de consulta modernas gerarão ANSI-92.
  • Como apontado por @gbn, ele tende a evitar junções cruzadas acidentais.

Eu mesmo resisti ao ANSI-92 por algum tempo, pois há uma pequena vantagem conceitual na sintaxe antiga, pois é mais fácil visualizar o SQL como uma junção cartesiana em massa de todas as tabelas usadas, seguida de uma operação de filtragem - uma técnica mental que pode ser útil para entender o que uma consulta SQL está fazendo. No entanto, decidi há alguns anos que precisava mudar com os tempos e, após um período de ajuste relativamente curto, agora o prefiro fortemente - principalmente por causa da primeira razão dada acima. O único lugar em que se deve sair da sintaxe ANSI-92, ou melhor, não usar a opção, é com junções naturais que são implicitamente perigosas.