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

Qual é a diferença entre usar uma junção cruzada e colocar uma vírgula entre as duas tabelas?


Eles retornam os mesmos resultados porque são semanticamente idênticos. Esse:
select * 
  from A, B

...é uma sintaxe ANSI-89. Sem uma cláusula WHERE para vincular as tabelas, o resultado é um produto cartesiano. Que é exatamente o que a alternativa oferece também:
    select * 
      from A 
cross join B

...mas o CROSS JOIN é a sintaxe ANSI-92.

Sobre o desempenho


Não há diferença de desempenho entre eles.

Por que usar ANSI-92?


A razão para usar a sintaxe ANSI-92 é para suporte a OUTER JOIN (IE:LEFT, FULL, RIGHT) -- a sintaxe ANSI-89 não tem nenhuma, então muitos bancos de dados implementaram seus próprios (que não porta para nenhum outro banco de dados ). IE:(+) da Oracle , =* do SQL Server