Nein, das stimmt überhaupt nicht. Der Autor bereitet seine Leser auf Verwirrung vor und ermutigt zur Cargo-Kult-Programmierung, die einen sehr starken strukturellen Unterschied zwischen der Standardsyntax und dieser älteren Variante, die er bevorzugt, vermeidet. Insbesondere macht es eine überfüllte WHERE-Klausel schwieriger, herauszufinden, was seine Abfrage besonders macht.
Sein Beispiel veranlasst einen Leser, eine mentale Karte seiner Bedeutung zu generieren, die eine Menge Unordnung aufweist.
SELECT pet.id, pet.name, pet.age, pet.dead
FROM pet, person_pet, person
WHERE
pet.id = person_pet.pet_id AND
person_pet.person_id = person.id AND
person.first_name = "Zed";
Grob gesagt ist das obige:
Rufen Sie die ID, den NAMEN, das ALTER und den TOTEN des Haustiers für alle Haustiere, person_pet und Personen ab, bei denen die Haustier-ID mit der pet_id eines person_pet übereinstimmt und die person_id dieses Datensatzes mit der person_id einer Person übereinstimmt, deren FIRST_NAME "Zed" ist.
Mit einer solchen mentalen Karte kann der Leser (der aus irgendeinem Grund die SQL von Hand schreibt) sehr leicht einen Fehler machen, möglicherweise indem er eine oder mehrere Tabellen weglässt. Und ein Leser von Code, der so geschrieben ist, muss härter arbeiten, um genau herauszufinden, was der SQL-Autor versucht. ("Harder" ist auf der Ebene des Lesens von SQL mit oder ohne Syntaxhervorhebung, aber es ist immer noch ein Unterschied von mehr als Null.)
Es gibt einen Grund, warum JOINs üblich sind, und es ist der alte Klassiker unter den Canards, bei denen es um die Trennung von Interessen geht. Insbesondere für eine SQL-Abfrage gibt es einen guten Grund, die Struktur der Daten von der Filterung der Daten zu unterscheiden.
Wenn die Abfrage sauberer geschrieben ist, wie z
SELECT pet.id, pet.name, pet.age
FROM pet
JOIN person_pet ON pet.id = person_pet.pet_id
JOIN person ON person.id = person_pet.person_id
WHERE
person.first_name = "Zed";
Dann hat der Leser eine klarere Unterscheidung zwischen den Komponenten dessen, was gefragt wird. Der Unterscheidungsfilter dieser Abfrage ist von der Beziehung seiner Komponenten zueinander getrennt, und die erforderlichen Komponenten jeder Beziehung befinden sich direkt neben dem Ort, an dem sie benötigt werden.
Natürlich sollte ein modernes Datenbanksystem keinen signifikanten Unterschied zwischen den beiden Stilen erkennen. Wenn jedoch die Datenbankleistung die einzige Überlegung wäre, würde die SQL-Abfrage auch keinen Leerraum oder keine Großschreibung aufweisen.