16th Dec 2024 Lectura de 8 minutos INNER JOIN vs. OUTER JOIN: ¿Cuál es la diferencia? Gustavo du Mortier JOIN Índice ¿Qué es un JOIN en SQL? ¿Qué es un INNER JOIN? ¿Qué es un OUTER JOIN? UNIÓN EXTERNA IZQUIERDA UNIÓN EXTERNA DERECHA FULL OUTER JOIN Resumen de INNER JOIN vs. OUTER JOIN Dónde aprender más sobre INNER JOIN y OUTER JOIN Decidir cuándo usar INNER JOIN vs. OUTER JOIN es a menudo un reto para los principiantes. En este artículo, encontrará explicaciones y ejemplos que le ayudarán a entender mejor la diferencia entre estas dos uniones. En SQL, JOINs le permite combinar datos de diferentes tablas; INNER JOIN y OUTER JOIN son simplemente tipos de sentencias JOIN. Comprender sus diferencias es fundamental si trabajas con bases de datos relacionales. También es crucial si vas a una entrevista de trabajo de SQL: la diferencia entre INNER JOIN y OUTER JOIN se encuentra entre las preguntas más frecuentes de las entrevistas de SQL. Para repasar sus conocimientos de JOINs, le recomiendo nuestro curso interactivo Tipos de JOIN en SQL. Encontrará 93 ejercicios prácticos que cubren todos los diferentes casos de uso de INNER JOIN frente a OUTER JOIN. Además, aprenderá a filtrar datos correctamente con diferentes variantes de JOIN y a combinar tablas con columnas no clave. ¿Qué es un JOIN en SQL? Comencemos revisando un SQL básico JOIN. Imagina que tienes una base de datos universitaria con las tablas student y lecturer. En la tabla student tenemos el campo opcional advisor_id que almacena el ID del profesor que es el director de tesis de ese estudiante. Un estudiante puede no tener director si todavía no está escribiendo su tesis. Para mostrar los nombres de los estudiantes y sus asesores, utilizamos la sentencia JOIN: SELECT student.full_name AS student_name, lecturer.full_name AS advisor_name FROM student JOIN lecturer ON student.advisor_id = lecturer.id; Los datos resultantes podrían tener este aspecto: student_nameadvisor_name Alice JohnsonAmina Patel Michael SmithSantiago Rivera Bob SmithJessica Martinez Charlie BrownJessica Martinez La sentencia JOIN viene después de la cláusula FROM: se pone el nombre de la primera tabla después de FROM, luego la palabra clave JOIN, luego el nombre de la otra tabla, seguido de la palabra clave ON y la condición JOIN. En nuestro caso, la condición JOIN es student.advisor_id = lecturer.id. Esta consulta devuelve las filas en las que el advisor_id de la tabla student coincide con el id de la tabla lecturer de la tabla. Básicamente, devuelve los nombres de los estudiantes junto con los nombres de sus asesores. Para futuras referencias sobre todos los tipos de JOINs, recomendamos marcar o imprimir nuestra Hoja de Consulta SQL JOIN. ¿Qué es un INNER JOIN? Cuando usa la palabra clave JOIN en SQL, en realidad está haciendo un INNER JOIN. Un INNER JOIN devuelve todas las combinaciones de filas de las dos tablas que satisfacen la condición ON. En nuestro ejemplo, devuelve los nombres de los estudiantes y sus asesores. Sin embargo, un INNER JOIN no es suficiente si desea incluir filas que no tienen una coincidencia en la otra tabla. Por ejemplo, es posible que desee mostrar los nombres de todos los estudiantes, incluso los que aún no tienen asesor. O quizás necesite incluir los nombres de todos los profesores, incluso los que no están asesorando a ningún alumno. Aquí es cuando entra en juego OUTER JOIN. ¿Qué es un OUTER JOIN? Un OUTER JOIN es el tipo de JOIN que devuelve las filas coincidentes de las dos tablas más todas las filas no coincidentes de una (o a veces ambas) de las tablas. OUTER JOIN tiene tres variantes: LEFT OUTER JOIN RIGHT OUTER JOIN y FULL OUTER JOIN. Examinemos cada una de ellas. UNIÓN EXTERNA IZQUIERDA LEFT OUTER JOIN (o simplemente LEFT JOIN) devuelve todas las filas de la tabla izquierda (la tabla a la izquierda de la sentencia JOIN, es decir, inmediatamente después de FROM) con datos coincidentes de la tabla derecha (la tabla a la derecha de (es decir, inmediatamente después de) la sentencia JOIN ). Si no hay ninguna coincidencia, las columnas procedentes de la tabla derecha se rellenan con NULL. Utilizando las etiquetas student y lecturer como ejemplo, podemos utilizar LEFT JOIN para obtener una lista de todos los alumnos con los datos de su asesor. Queremos incluir a todos los estudiantes, incluso a los que aún no tienen asesor. La consulta sería la siguiente: SELECT student.full_name AS student_name, lecturer.full_name AS advisor_name FROM student LEFT JOIN lecturer ON student.advisor_id = lecturer.id; Los resultados son: student_nameadvisor_name Alice JohnsonAmina Patel Michael SmithSantiago Rivera Bob SmithJessica Martinez Charlie BrownJessica Martinez Diana PrinceNULL En los resultados podemos ver una fila que no estaba incluida anteriormente. La estudiante Diana Prince no tiene asesor, por lo que no se incluyó en el resultado de la consulta INNER JOIN. Sin embargo, con LEFT JOIN, se incluye. LEFT JOIN incluye todas las filas de la tabla izquierda, incluso aquellas que no tienen su fila correspondiente en la tabla derecha. Las columnas que provienen de la lecturer tabla se muestran como NULL. Lea este artículo sobre LEFT OUTER JOINs en SQL si necesita más información. UNIÓN EXTERNA DERECHA RIGHT OUTER JOIN (o simplemente RIGHT JOIN) devuelve todas las filas de la tabla derecha (la segunda tabla) con datos coincidentes de la tabla izquierda (la primera tabla). Si no hay ninguna coincidencia, las columnas procedentes de la tabla izquierda se rellenan con nulos. Supongamos que queremos listar los profesores con los datos de los alumnos a los que asesoran. Queremos incluir a todos los profesores, incluso a los que no están asesorando a ningún alumno. Para ello, escribiríamos una consulta como la siguiente: SELECT student.full_name AS student_name, lecturer.full_name AS lecturer_name FROM student RIGHT JOIN lecturer ON student.advisor_id = lecturer.id; El resultado de esta consulta es: student_namelecturer_name Alice JohnsonAmina Patel Michael SmithSantiago Rivera Bob SmithJessica Martinez Charlie BrownJessica Martinez NULLKeiko Tanaka NULLJamal Al-Fayed NULLNadia Kowalski El uso de RIGHT JOIN en la consulta nos permite obtener una lista de todos los profesores, independientemente de si están asignados a estudiantes o no. Si un profesor está asignado a un alumno, aparecerá en la lista con el nombre del alumno. Si un profesor no está asignado a ningún alumno, los datos del alumno en el conjunto de resultados son NULL. Consulta esta guía completa de uniones SQL para obtener todos los recursos que necesitas para entender completamente este tema. FULL OUTER JOIN FULL OUTER JOIN (o simplemente FULL JOIN) nos permite obtener todos los datos de ambas tablas, haya o no coincidencia entre sus filas. En nuestro ejemplo, el uso de FULL JOIN entre student y lecturer devuelve todos los alumnos y todos los profesores. La consulta sería la siguiente SELECT student.full_name AS student_name, lecturer.full_name AS advisor_name FROM student FULL JOIN lecturer ON student.advisor_id = lecturer.id; Y los resultados serían: student_nameadvisor_name Alice JohnsonAmina Patel Michael SmithSantiago Rivera Bob SmithJessica Martinez Charlie BrownJessica Martinez Diana PrinceNULL NULLKeiko Tanaka NULLJamal Al-Fayed NULLNadia Kowalski En el resultado, puede ver todos los estudiantes y todos los profesores. Si un estudiante no tiene asesor, los datos del asesor son NULL. Si un profesor no está asignado a ningún estudiante, los datos del estudiante correspondiente son NULL. Encuentre más ejemplos y ponga a prueba sus conocimientos con estas 12 preguntas de práctica de SQL JOIN. Hay algunos sistemas de gestión de bases de datos relacionales (RDBMS), como MySQL y MariaDB, que no admiten FULL JOIN. En estos SGBD se puede obtener el mismo resultado, pero la consulta es un poco más larga. La forma de hacer un FULL JOIN en las versiones de SQL que no soportan ese comando es utilizar UNION entre el INNER JOIN, el LEFT JOIN, y el RIGHT JOIN: SELECT student.full_name AS student_name, lecturer.full_name AS advisor_name FROM student LEFT JOIN lecturer ON student.advisor_id = lecturer.id UNION SELECT student.full_name AS student_name, lecturer.full_name AS advisor_name FROM student JOIN lecturer ON student.advisor_id = lecturer.id SELECT student.full_name AS student_name, lecturer.full_name AS advisor_name FROM student RIGHT JOIN lecturer ON student.advisor_id = lecturer.id; En el script anterior, la unión de las tres formas de JOIN - LEFT JOIN, INNER JOIN, y RIGHT JOIN - da como resultado los mismos datos que FULL JOIN en los RDBMS que lo soportan. Cuando sienta que ya le ha cogido el truco a Tipos de JOIN en SQL, lea estas preguntas y respuestas de entrevistas SQL JOIN para comprobar si está preparado para esa entrevista de trabajo. Resumen de INNER JOIN vs. OUTER JOIN Podemos sintetizar lo que hemos aprendido sobre INNER JOIN y OUTER JOIN en la siguiente tabla: INNER JOIN OUTER JOIN Explicación Devuelve filas de las dos tablas donde se cumple la condición ON Devuelve filas de las dos tablas donde se cumple la condición ON Y también los registros no coincidentes de una o ambas tablas, rellenando con valores nulos donde no existen coincidencias. Tipos 1 tipo: JOIN 3 tipos diferentes: LEFT JOIN, RIGHT JOIN, FULL JOIN Abreviatura JOIN = INNER JOIN LEFT JOIN = LEFT OUTER JOIN RIGHT JOIN = RIGHT OUTER JOIN FULL JOIN = FULL OUTER JOIN Ejemplo SELECT student.full_name, lecturer.full_name FROM student JOIN lecturer ON student.advisor_id = lecturer.id; SELECT student.full_name, lecturer.full_name FROM student LEFT JOIN lecturer ON student.advisor_id = lecturer.id; Revise esta lista de siete ejemplos SQL JOIN con explicaciones para más detalles. Dónde aprender más sobre INNER JOIN y OUTER JOIN Ahora que conoce las diferencias entre INNER JOIN vs. OUTER JOIN, puede escribir consultas precisas que generen información confiable y precisa. Con la práctica, podrás hacer frente a cualquier pregunta de entrevista SQL sobre las diferencias entre INNER JOIN y OUTER JOIN. Antes de irte, te recomiendo nuestro Tipos de JOIN en SQL curso si quieres profundizar tus conocimientos. Al final del curso, conocerás las distintas formas de obtener datos combinados de varias tablas. Y entenderás cómo elegir la mejor opción para cada escenario. Ahora te toca a ti empezar a informarte sobre las diferencias entre INNER JOIN y OUTER JOIN. ¡Feliz aprendizaje! Tags: JOIN