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

Werden ANSI-JOIN- und Nicht-ANSI-JOIN-Abfragen unterschiedlich ausgeführt?

Die beiden Abfragen sind identisch, außer dass die zweite die ANSI-92-SQL-Syntax und die erste die ältere SQL-Syntax ist, die keine Join-Klausel enthält. Sie sollten genau den gleichen internen Abfrageplan erzeugen, obwohl Sie dies vielleicht gerne überprüfen möchten.

Sie sollten aus mehreren Gründen die ANSI-92-Syntax verwenden

  • Die Verwendung der JOIN-Klausel trennt die Beziehungslogik von der Filterlogik (dem WHERE) und ist daher sauberer und leichter zu verstehen.
  • Bei dieser speziellen Abfrage spielt es keine Rolle, aber es gibt einige Umstände, bei denen die ältere Outer-Join-Syntax (mit + ) mehrdeutig ist und die Abfrageergebnisse daher von der Implementierung abhängen - oder die Abfrage überhaupt nicht aufgelöst werden kann. Diese treten bei ANSI-92 nicht auf
  • Es ist eine gute Praxis, da die meisten Entwickler und Datenbankadministratoren heutzutage ANSI-92 verwenden und Sie dem Standard folgen sollten. Sicherlich werden alle modernen Abfragetools ANSI-92 generieren.
  • Wie von @gbn betont, werden versehentliche Kreuzverknüpfungen vermieden.

Ich selbst habe mich einige Zeit gegen ANSI-92 gewehrt, da die alte Syntax einen leichten konzeptionellen Vorteil hat, da es einfacher ist, sich SQL als eine kartesische Massenverknüpfung aller verwendeten Tabellen vorzustellen, gefolgt von einer Filteroperation - eine mentale Technik, die nützlich sein kann um zu verstehen, was eine SQL-Abfrage tut. Allerdings habe ich vor ein paar Jahren entschieden, dass ich mit der Zeit gehen muss und nach einer relativ kurzen Eingewöhnungsphase bevorzuge ich es jetzt entschieden - vor allem wegen des oben genannten ersten Grundes. Die einzige Stelle, an der man von der ANSI-92-Syntax abweichen oder die Option besser nicht verwenden sollte, sind natürliche Joins, die implizit gefährlich sind.