Ich möchte auch darauf hinweisen, dass die Verwendung der älteren Syntax fehleranfälliger ist. Wenn Sie innere Verknüpfungen ohne eine ON-Klausel verwenden, erhalten Sie einen Syntaxfehler. Wenn Sie die ältere Syntax verwenden und eine der Verknüpfungsbedingungen in der Where-Klausel vergessen, erhalten Sie eine Kreuzverknüpfung. Die Entwickler beheben dies oft, indem sie das Schlüsselwort distinct hinzufügen (anstatt die Verknüpfung zu reparieren, da sie immer noch nicht erkennen, dass die Verknüpfung selbst fehlerhaft ist), was das Problem zwar scheinbar behebt, die Abfrage aber erheblich verlangsamt.
Wenn Sie in der alten Syntax eine Querverbindung haben, woher weiß der Wartungsbeauftragte dann, ob Sie eine solche beabsichtigt haben (es gibt Situationen, in denen Querverbindungen erforderlich sind) oder ob es sich um ein Versehen handelt, das behoben werden sollte?
Ich möchte Sie auf diese Frage hinweisen, um zu sehen, warum die implizite Syntax schlecht ist, wenn Sie linke Joins verwenden. Sybase *= nach Ansi Standard mit 2 verschiedenen äußeren Tabellen für dieselbe innere Tabelle
Außerdem ist der Standard, der explizite Verknüpfungen verwendet, über 20 Jahre alt, was bedeutet, dass die implizite Verknüpfungssyntax in diesen 20 Jahren veraltet war. Würden Sie Anwendungscode mit einer Syntax schreiben, die seit 20 Jahren veraltet ist? Warum sollten Sie Datenbankcode schreiben, der das tut?
2 Stimmen
@Marco: hier ist es
2 Stimmen
Mögliche Duplikate von SQL left join vs. mehrere Tabellen in der FROM-Zeile?
32 Stimmen
Wenn ich es richtig verstanden habe, handelt es sich bei der ersten Variante um die implizite ANSI-SQL-89-Syntax und bei der zweiten Variante um die explizite ANSI-SQL-92-Join-Syntax. Beide führen in konformen SQL-Implementierungen zum gleichen Ergebnis und beide führen in gut gemachten SQL-Implementierungen zum gleichen Abfrageplan. Ich persönlich bevorzuge die SQL-89-Syntax, aber viele Leute bevorzugen die SQL-92-Syntax.
12 Stimmen
@Hogan Ich habe nur auf die offiziellen Bezeichnungen für die verschiedenen Syntaxen hingewiesen. Da in keiner der Antworten die vollständigen Namen genannt wurden, habe ich beschlossen, diese als Kommentar hinzuzufügen. Da mein Kommentar jedoch nicht die eigentliche Frage beantwortet, habe ich ihn als Kommentar und nicht als Antwort hinzugefügt. (In den Antworten mit hoher Stimmenzahl werden Behauptungen aufgestellt wie "INNER JOIN ist ANSI-Syntax" und "implicit join ANSI syntax is older", was überhaupt nichts aussagt, da beide Syntaxen unterschiedliche ANSI-Syntaxen sind).