Volver a la lista de artículos Artículos
Lectura de 9 minutos

¿Cuáles son los diferentes tipos de JOIN de SQL?

No se puede subestimar la importancia del JOIN cuando se aprende SQL. No sólo es una de las operaciones más fundamentales en las bases de datos relacionales, sino que también es muy versátil con muchos tipos diferentes. Aunque el JOIN de SQL puede ser intimidante al principio, se convierte en un instrumento muy útil en su arsenal una vez que lo entiende. Exploremos todos los tipos de SQL JOIN.

Podemos decir con seguridad que la operación JOIN es una de las características más poderosas de SQL. Es la fuente de envidia de todos los SGBD (sistemas de gestión de bases de datos) no relacionales - es un concepto muy simple pero ampliamente aplicable en casos que unen dos conjuntos de datos.

En pocas palabras, el JOIN es una operación en la que se comparan las tablas entre sí, fila por fila. Esta comparación permite obtener columnas de cualquier tabla implicada en el JOIN.

Un gran lugar para los ejercicios después de leer este artículo es nuestro curso interactivo Tipos de JOIN en SQL interactivo. Ofrece más de 90 ejercicios prácticos sobre los diferentes tipos de uniones que se discuten aquí.

Ahora, vamos a crear 2 tablas para explorar y dominar el arte de JOIN. Nuestra primera tabla, employeesconsta de 5 columnas:

  • id - El ID único del empleado.
  • name - El nombre del empleado.
  • specialization - La especialización del empleado en la empresa.
  • coach_id - El ID del entrenador/mentor del empleado. El ID de otro empleado de la empresa.
  • project_id - El ID del proyecto actual en el que participa el empleado.
idnamespecializationcoach_idproject_id
1Olli WoodwardDeveloper41
2Pete NolanManagerNULL1
3Will BarkerIT Support43
4Uma NormanDeveloperNULL4
5Peggy BergManager24
6Mary SheltonAnalystNULLNULL

La segunda tabla es projects. Contiene 3 columnas:

  • id - El ID único del proyecto.
  • name - El nombre del proyecto.
  • is_external - Un valor booleano que representa si el proyecto es externo o interno.
idnameis_external
1Website UI/UX DesignTRUE
2Research & DevelopmentFALSE
3SupportFALSE
4Database Architecture DesignTRUE

Observa que hay una conexión lógica entre las dos tablas. El project_id de employees corresponde a la id de projects. Los valores correspondientes en las tablas están codificados por colores para una mejor presentación.

Ahora que tenemos las tablas, ¡vamos al grano!

INNER JOIN (también conocido como JOIN)

El primero de los tipos de JOIN de SQL es el INNER JOIN. Cuando usted escribe "JOIN" en su código SQL, éste utiliza el INNER JOIN. Así que, aunque no hace daño, no necesita escribir INNER en sus consultas.

Una palabra clave ON sigue a todos los JOINs en SQL. Indica el inicio de la condición de conexión. INNER JOINs El JOIN, al igual que todos los demás JOINs, produce sólo las filas que satisfacen la condición de conexión.

Antes de continuar, tenga en cuenta que el operador JOIN no es la única forma de unir datos de dos tablas. También puede utilizar WHERE. ¿Está interesado en aprender más sobre ello? Tenemos el artículo adecuado para ti.

Pero dejemos de lado la teoría por un momento y pongámonos a codificar. Utilicemos nuestras dos tablas y un INNER JOIN para averiguar qué empleado trabaja en qué proyecto:

SELECT
 employees.name as employee,
 specialization,
 projects.name as project
FROM employees
JOIN projects
 ON employees.project_id = projects.id

Antes de ver el resultado de esta consulta, analicemos la propia consulta. Como puede ver, unimos las dos tablas utilizando JOIN. Después de JOIN, especificamos el operador ON y la condición de la unión.

Así pues, hemos unido las tablas basándonos en la condición de que project_id de la tabla employees sea igual al id de la tabla projects. Veamos el resultado de la consulta:

employeespecializationproject
Olli WoodwardDeveloperWebsite UI/UX Design
Pete NolanManagerWebsite UI/UX Design
Will BarkerIT SupportSupport
Uma NormanDeveloperDatabase Architecture Design
Peggy BergManagerDatabase Architecture Design

Vemos que Olli Woodward y Pete Nolan tienen un proyecto "Website UI/UX Design". Su project_id es igual a 1, que es el ID de este proyecto en la tabla projects. Lo mismo ocurre con las demás filas del resultado.

Sin embargo, aquí no vemos a Mary Shelton. Su project_id es NULL, y no hay ningún proyecto con el id igual a NULL. Igualmente, el proyecto "Investigación y Desarrollo" tiene el ID 2, pero ningún empleado tiene el project_id igual a 2.

¿Hemos conseguido que se interese por el INNER JOIN y que quiera saber más de sus entresijos? ¡Eche un vistazo a nuestro artículo específico sobre el INNER JOIN!

LEFT OUTER JOIN

El LEFT OUTER JOIN es uno de los tipos de JOIN externos de SQL. La palabra clave OUTER es opcional y a menudo se omite, dejándonos sólo con el operador LEFT JOIN.

La diferencia general entre el OUTER JOIN y el INNER JOIN es que el OUTER JOIN incluye no sólo las filas que satisfacen la condición de conexión sino también las filas que no satisfacen la condición de una (o más) de las tablas.

Volviendo a LEFT OUTER JOIN específicamente, incluye las filas que satisfacen la condición de conexión (al igual que INNER JOIN) y todas las demás filas de la tabla de la izquierda (o la primera). Utilicemos nuestro ejemplo anterior, cambiando JOIN por LEFT JOIN para ver la diferencia:

SELECT
 employees.name as employee,
 specialization,
 projects.name as project
FROM employees
LEFT JOIN projects
 ON employees.project_id = projects.id

Y aquí está el resultado de la consulta:

employeespecializationproject
Olli WoodwardDeveloperWebsite UI/UX Design
Pete NolanManagerWebsite UI/UX Design
Will BarkerIT SupportSupport
Uma NormanDeveloperDatabase Architecture Design
Peggy BergManagerDatabase Architecture Design
Mary SheltonAnalystNULL

Como puede ver, se ha añadido una fila más: Mary Shelton con el proyecto NULL. Esta fila en particular no satisface la condición employees.project_id = projects.id, ya que no hay proyectos con un ID de NULL. Pero esta fila existe en la tabla employees tabla, por lo que se añade al resultado. El nombre del proyecto de Mary Shelton es un valor NULL por la misma razón, ya que no hay IDs de NULL entre los proyectos.

Ahora ya tiene la idea principal de LEFT OUTER JOIN. Dicho esto, siempre puede leer nuestro artículo sobre LEFT OUTER JOIN para aprender más sobre él o ver más ejemplos.

INNER y LEFT OUTER JOINs son los tipos más comunes de JOIN en SQL. Por lo tanto, asegúrese de practicarlo a fondo con nuestro Tipos de JOIN en SQL curso. Lea sobre el curso aquí.

RIGHT OUTER JOIN

El RIGHT OUTER JOIN puede ser visto como un hermano gemelo del LEFT OUTER JOIN. La única diferencia entre estos dos tipos de SQL JOIN es la tabla de la que se toman los registros independientemente de la condición JOIN. En el LEFT OUTER JOIN, esa es la primera tabla o tabla de la izquierda; en el RIGHT OUTER JOIN, es la segunda tabla o tabla de la derecha.

Utilicemos el ejemplo anterior, pero ahora cambiemos LEFT JOIN por RIGHT JOIN:

SELECT
 employees.name as employee,
 specialization,
 projects.name as project
FROM employees
RIGHT JOIN projects
 ON employees.project_id = projects.id

Ahora, analicemos el resultado de la consulta:

employeespecializationproject
Olli WoodwardDeveloperWebsite UI/UX Design
Pete NolanManagerWebsite UI/UX Design
Will BarkerIT SupportSupport
Uma NormanDeveloperDatabase Architecture Design
Peggy BergManagerDatabase Architecture Design
NULLNULLResearch & Development

Como podemos ver, el registro de Mary Shelton ya no existe. No satisface la condición ON, ni pertenece a la tabla de la derecha. Por lo tanto, no se incluye en el resultado.

Por otro lado, ahora tenemos el proyecto "Investigación y Desarrollo" aquí. No satisface la condición de JOIN, pero existe en la tabla de la derecha, por lo que se incluye en el resultado. Observe que esta fila tiene NULLs en las columnas de empleados y specialization. Esto se debe a que ningún registro de la tabla employees tiene project_id igual a 2, el ID de este proyecto. Por lo tanto, se devuelve un NULL en su lugar.

FULL OUTER JOIN

El FULL OUTER JOIN, o simplemente FULL JOIN, es el último tipo del OUTER JOIN. En cierto modo, combina tanto LEFT como RIGHT OUTER JOINs.

Aunque incluye los registros que cumplen la condición de JOIN, también incluye las filas de ambas tablas que no la cumplen. Es decir, un FULL JOIN devuelve todas las filas de ambas tablas. Si una fila de una tabla no tiene un registro correspondiente de la otra tabla, los datos que faltan se rellenan con NULLs.

Veamos un ejemplo de FULL OUTER JOIN:

SELECT
 employees.name as employee,
 specialization,
 projects.name as project
FROM employees
FULL JOIN projects
 ON employees.project_id = projects.id

Este es el resultado:

employeespecializationproject
Olli WoodwardDeveloperWebsite UI/UX Design
Pete NolanManagerWebsite UI/UX Design
Will BarkerIT SupportSupport
Uma NormanDeveloperDatabase Architecture Design
Peggy BergManagerDatabase Architecture Design
Mary SheltonAnalystNULL
NULLNULLResearch & Development

Como puede ver, aquí tenemos todas las filas de ambas tablas. Las filas que cumplen la condición tienen los datos correspondientes de ambas tablas. Para las filas que no lo hacen, las columnas de la otra tabla se rellenan con NULLs.

Si desea una descripción accesible y breve de FULL OUTER JOIN así como de otros tipos de JOIN de SQL, utilice nuestra hoja de trucos de JOIN de SQL.

CROSS JOIN

Este tipo de JOIN SQL es bastante diferente de los mencionados hasta ahora en este artículo. No sólo es diferente su propósito, sino que también tiene una sintaxis ligeramente diferente.

Cuando se utiliza en una consulta, un CROSS JOIN devuelve un producto cartesiano - todas las combinaciones posibles de las filas de ambas tablas. Todos los registros de una tabla se unen automáticamente con todos los registros de la otra.

Además, no existe la condición ON. Para este JOIN en una consulta, simplemente utilice el operador CROSS JOIN sin seguir con la palabra clave ON.

Veamos cómo funciona todo en un ejemplo:

SELECT
 employees.name as employee,
 projects.name as project
FROM employees
CROSS JOIN projects

Observe que seleccionamos dos columnas, el nombre del empleado y el nombre del proyecto, seguido de CROSS JOIN. Veamos el resultado:

employeeproject
Olli WoodwardWebsite UI/UX Design
Olli WoodwardResearch & Development
Olli WoodwardSupport
Olli WoodwardDatabase Architecture Design
Pete NolanWebsite UI/UX Design
Pete NolanResearch & Development
Pete NolanSupport
Pete NolanDatabase Architecture Design
Will BarkerWebsite UI/UX Design
Will BarkerResearch & Development
Will BarkerSupport
Will BarkerDatabase Architecture Design
Uma NormanWebsite UI/UX Design
Uma NormanResearch & Development
Uma NormanSupport
Uma NormanDatabase Architecture Design
Peggy BergWebsite UI/UX Design
Peggy BergResearch & Development
Peggy BergSupport
Peggy BergDatabase Architecture Design
Mary SheltonWebsite UI/UX Design
Mary SheltonResearch & Development
Mary SheltonSupport
Mary SheltonDatabase Architecture Design

Observe el número de filas que devuelve. Es bastante fácil calcularlo: el número de filas de la primera tabla * el número de filas de la segunda tabla = el número de filas resultantes. Así, cada uno de los 6 empleados está asignado a cada uno de los 4 proyectos.

¿Todavía tiene alguna duda sobre CROSS JOIN? O tal vez sólo quiera aprender más sobre ella. ¡Consulte nuestra Guía Ilustrada del CROSS JOIN de SQL!

¡Practique todos los tipos de JOIN de SQL!

Ahora conoce los diferentes tipos de JOIN en SQL. Esta es una gran oportunidad para profundizar este nuevo conocimiento o simplemente repasar lo que ya sabe. De cualquier manera, recomiendo nuestro gran curso interactivo de JOIN en SQL. Con más de 90 ejercicios prácticos, es una oportunidad para practicar este aspecto fundamental de SQL.