tables outer natural left joins inner sql sql-server tsql join syntax

outer - sql join 3 tables



Sintaxis de unión extraña/esotérica (2)

Lo ejecuté por un colega que lo descubrió:

select <stuff> from A inner join B on A.ID = B.A_ID inner join ( C -- put a bracket here... inner join D ON C.C_ID = D.C_ID ) -- and one here ON B.C_ID = D.C_ID

o para formatearlo un poco mejor:

select <stuff> from A inner join B on A.ID = B.A_ID inner join ( C inner join D ON C.C_ID = D.C_ID ) ON B.C_ID = D.C_ID

No estaba familiarizado con este tipo de "sub-join" (no sé cómo se llama), pero esto es mucho más legible y claro

Me han proporcionado este antiguo código SQL (los nombres de las tablas han cambiado) para replicar, y la sintaxis JOIN no es algo que haya visto antes, y está resultando difícil para google:

select <stuff> from A inner join B on A.ID = B.A_ID inner join C -- eh? No ON? inner join D ON C.C_ID = D.C_ID ON B.C_ID = D.C_ID -- a second ON here? what?

Cuando vi el código, supuse que me enviarían un código roto y no se ejecutaría.

Pero lo hace. (Sql Server 2012)

¿Qué hace? ¿Hay una manera más sensata / estándar de escribirlo? ¿Que esta pasando aqui?


Si bien es inusual, esto es perfectamente válido para tsql. Por lo general, ve este enfoque cuando tiene una combinación externa con un conjunto de tablas relacionadas que están unidas internamente entre sí. Una mejor manera en mi humilde opinión de escribir esto sería:

inner join B on A.ID = B.A_ID inner join (C inner join D ON C.C_ID = D.C_ID) ON B.C_ID = D.C_ID

Esto hace que la lógica de unión sea clara, y también ayuda al lector. Además, le permite al lector saber que el desarrollador lo hizo intencionalmente. Así que deja que esto sea un ejemplo de pobre codificación. Comenta cosas que son inusuales. Explicar cosas Haga que alguien revise su código periódicamente para ayudar a mejorar su estilo y uso.

Y podría escribir esto en un estilo "típico" reorganizando el orden de las tablas en la cláusula from, pero supongo que la versión actual tiene más sentido lógico con los nombres de tablas reales.