Estoy usando PostgreSQL, pero creo que la pregunta también se aplica a otros SQL.
Estaba editando una cláusula JOIN
y terminé con la siguiente sintaxis.
tableA JOIN tableB JOIN tableC ON tableB.fk = tableC.pk ON tableA.pk = tableB.fk;
Es decir, tengo 2 cláusulas JOIN seguidas de 2 cláusulas ON. Los campos fk
y pk
son mis claves principales, abreviadas para este ejemplo.
Probé antes de darme cuenta de la sintaxis. Lo que me sorprendió es que funcionó.
La pregunta es: ¿es esa una variación adecuada de la sintaxis y cómo se interpreta?
Lo que has escrito es correcto. También puedes escribirlo como:
tableA JOIN tableB ON tableA.pk = tableB.fk JOIN tableC ON tableB.fk = tableC.pk
Sin embargo, ambas consultas dan el mismo resultado :)
Es legal, aunque no común.
Para interpretarlo, trabaja de adentro hacia afuera. Primero evalúe tableB JOIN tableC
y use la primera expresión ON
. Ayuda, porque esta parte tiene sentido por sí misma:
tableB JOIN tableC ON tableB.fk = tableC.pk
El conjunto de resultados completo de esa expresión se convierte en el segundo término/lado derecho de la expresión de combinación externa, lo que le da esto:
tableA JOIN (previous expression) ON tableA.pk = tableB.fk
Una cosa para recordar es que si algún registro se filtró por la expresión primera/interna, no se considerará en absoluto para la expresión externa. No hace ninguna diferencia en este ejemplo, pero puede cambiar las cosas cuando se trata de uniones EXTERNAS.