En una consulta sql, ¿ Hay un orden para declarar los Join?

publicado por: Anonymous

Siempre he tenido la duda si es lo mismo o si tiene consecuencias hacer una consulta de las siguientes formas, o si hay algún estándar que seguir a la hora de establecer el orden de un join dependiendo de si es o no la tabla que tiene la llave foránea

__________               ___________
Alumno                   Escuela
——————                   ——————
Id_alumno                Id_escuela
Nombre                   Nombre
Id_escuela               ——————
——————

forma 1:

Select e.Nombre, a.id_alumno, a.nombre
From escuela e, alumno a
Where a.Id_escuela = e.Id_escuela

Forma 2:

Select e.Nombre, a.id_alumno, a.nombre
From alumno a, escuela e
Where e.Id_escuela, a.Id_escuela

Y pues lo mismo si fuera usando la palabra reservada JOIN

solución

El orden no tiene mayor importancia porque la gran mayoría de las bases de datos modernos reordenan los joins de forma automática según lo que es más óptimo para la consulta. Tu mismo puedes comprobar esto examinando el plan de ejecución de tus diferentes versiones de la consulta. Verás que en todos los casos, el plan de ejecución es el mismo.

Por esta razón, a menos que el orden afecte el resultado de la consulta en sí (que no es el caso en tu ejemplo, pero sí lo sería si se tratara de un LEFT JOIN por ejemplo), simplemente escribe la consulta para que te resulte legible y fácil de entender. La base de datos se encargará de reorganizar las claúsulas de tu consulta de forma automática para maximizar el rendimiento.

Con esto en mente, te recomiendo que evites usar la notación de joins implícitos. Mas bien, favorece los joins explícitos, que son más fáciles de entender, sobre todo cuando la consulta envuelve varias tablas con varios joins:

select e.nombre, a.id_alumno, a.nombre
  from escuela e
  join alumno a on a.id_escuela = e.id_escuela
Respondido por: Anonymous

Leave a Reply

Your email address will not be published. Required fields are marked *