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

Quale sintassi di join è migliore?

Bene, "meglio" è soggettivo. C'è un po' di stile qui. Ma risponderò direttamente alle tue domande.

  1. Entrambi funzionano allo stesso modo
  2. Entrambi sono conformi all'ANSI.
  3. Il problema con il primo esempio è che

    • è molto facile derivare inavvertitamente il prodotto incrociato (poiché è più facile tralasciare i criteri di unione)

    • diventa anche difficile eseguire il debug dei criteri di join quando aggiungi sempre più tabelle al join

    • poiché la sintassi del vecchio stile dell'external join (*=) è stata deprecata (è stato a lungo documentato che restituisce risultati errati), quando è necessario introdurre gli outer join, è necessario combinare il nuovo stile e il vecchio stile ... perché promuovere incoerenza?

    • sebbene non sia esattamente l'autorità sulle migliori pratiche, Microsoft consiglia la sintassi INNER/OUTER JOIN esplicita

    • con quest'ultimo metodo:

      • stai usando una sintassi di join coerente indipendentemente da inner / external
      • è più difficile (non impossibile) derivare accidentalmente il prodotto incrociato
      • l'isolamento dei criteri di unione dai criteri di filtro può semplificare il debug

Ho scritto il post indicato da Kevin.