Sqlserver
 sql >> Database >  >> RDS >> Sqlserver

Qual è la differenza tra l'utilizzo di un cross join e l'inserimento di una virgola tra le due tabelle?

Restituiscono gli stessi risultati perché sono semanticamente identici. Questo:

select * 
  from A, B

...è (sussultare) la sintassi ANSI-89. Senza una clausola WHERE per collegare le tabelle insieme, il risultato è un prodotto cartesiano. Che è esattamente ciò che offre anche l'alternativa:

    select * 
      from A 
cross join B

...ma il CROSS JOIN è sintassi ANSI-92.

Informazioni sulle prestazioni

Non c'è alcuna differenza di prestazioni tra di loro.

Perché usare ANSI-92?

Il motivo per utilizzare la sintassi ANSI-92 è per il supporto OUTER JOIN (IE:LEFT, FULL, RIGHT) - La sintassi ANSI-89 non ne ha, quindi molti database hanno implementato il proprio (che non esegue il porting su altri database ). IE:(+) di Oracle , =* di SQL Server