Sqlserver
 sql >> Datenbank >  >> RDS >> Sqlserver

Welche Join-Syntax ist besser?

Naja, "besser" ist subjektiv. Hier gibt es Stil. Aber ich werde direkt auf Ihre Fragen eingehen.

  1. Beide verhalten sich gleich
  2. Beide sind ANSI-konform.
  3. Das Problem mit dem ersten Beispiel ist, dass

    • es ist sehr einfach, versehentlich das Kreuzprodukt abzuleiten (da es einfacher ist, Join-Kriterien wegzulassen)

    • Es wird auch schwierig, die Join-Kriterien zu debuggen, wenn Sie dem Join immer mehr Tabellen hinzufügen

    • da die alte Outer-Join-Syntax (*=) veraltet ist (es ist seit langem dokumentiert, dass sie falsche Ergebnisse zurückgibt), müssen Sie, wenn Sie Outer-Joins einführen müssen, New-Style- und Old-Style-Joins mischen ... warum fördern Inkonsistenz?

    • Obwohl es nicht gerade die Autorität für bewährte Verfahren ist, empfiehlt Microsoft die explizite INNER/OUTER JOIN-Syntax

    • mit letzterer Methode:

      • Sie verwenden eine konsistente Join-Syntax, unabhängig von Inner/Outer
      • Es ist schwieriger (nicht unmöglich), versehentlich das Kreuzprodukt abzuleiten
      • Das Isolieren der Join-Kriterien von den Filterkriterien kann das Debuggen erleichtern

Ich habe den Beitrag geschrieben, auf den Kevin gezeigt hat.