Tipos de JOIN en SQL

En SQL, los JOIN son operaciones que nos permiten combinar datos de dos o más tablas en una consulta. Estas operaciones son esenciales para trabajar con bases de datos relacionales, donde los datos suelen estar distribuidos en diferentes tablas. Los JOIN permiten establecer relaciones entre tablas y recuperar información más completa de acuerdo con esas relaciones.

¿Qué son los JOIN?

Un JOIN es una cláusula en SQL que se utiliza para combinar filas de dos o más tablas basadas en una condición de relación entre ellas. Los JOIN pueden realizarse en diferentes tipos de relaciones, como las claves primarias y foráneas, o en cualquier otra condición lógica que sea común entre las tablas.

Tipos de JOIN

Existen varios tipos de JOIN que permiten combinar las tablas de diferentes maneras, dependiendo de cómo queremos que se manejen las filas no coincidentes. Para ilustrar los diferentes tipos de JOIN, utilizaremos las siguientes dos tablas:

Tabla: usuarios

bash
| id  | nombre   |
|-----|----------|
| 1   | Juan     |
| 2   | María    |
| 3   | Pedro    |
| 4   | Ana      |

Tabla: pedidos

bash
| id  | usuario_id | producto      |
|-----|------------|---------------|
| 1   | 1          | Producto A    |
| 2   | 1          | Producto B    |
| 3   | 2          | Producto C    |
| 4   | 5          | Producto D    |

Tipos de JOIN

INNER JOIN

El INNER JOIN devuelve solo las filas que tienen coincidencias en ambas tablas. Un INNER JOIN es lo mismo que un JOIN, ya que, de manera predeterminada, cuando escribes JOIN sin especificar el tipo, se interpreta como un INNER JOIN. Ejemplo:

inner join en sql urian viera

Usando INNER JOIN explícito

sql
SELECT usuarios.nombre, pedidos.producto
FROM usuarios
INNER JOIN pedidos ON usuarios.id = pedidos.usuario_id;

Resultado:

sql
| nombre | producto   |
|--------|------------|
| Juan   | Producto A |
| Juan   | Producto B |
| María  | Producto C |

Resultado:

sql
| nombre | producto   |
|--------|------------|
| Juan   | Producto A |
| Juan   | Producto B |
| María  | Producto C |

Usando INNER JOIN implícito:

sql
SELECT usuarios.nombre, pedidos.producto
FROM usuarios
JOIN pedidos
ON usuarios.id = pedidos.usuario_id;

LEFT JOIN

El LEFT JOIN devuelve todas las filas de la tabla de la izquierda (usuarios) y las filas coincidentes de la tabla de la derecha (pedidos). Si no hay coincidencia, el resultado es NULL en el lado derecho.

AB
sql
SELECT usuarios.nombre, pedidos.producto
FROM usuarios
LEFT JOIN pedidos ON usuarios.id = pedidos.usuario_id;

Resultado:

bash
| nombre | producto   |
|--------|------------|
| Juan   | Producto A |
| Juan   | Producto B |
| María  | Producto C |
| Pedro  | NULL       |
| Ana    | NULL       |

RIGHT JOIN

El RIGHT JOIN devuelve todas las filas de la tabla de la derecha (pedidos) y las filas coincidentes de la tabla de la izquierda (usuarios). Si no hay coincidencia, el resultado es NULL en el lado izquierdo.

AB
sql
SELECT usuarios.nombre, pedidos.producto
FROM usuarios
RIGHT JOIN pedidos ON usuarios.id = pedidos.usuario_id;

Resultado:

sql
| nombre | producto   |
|--------|------------|
| Juan   | Producto A |
| Juan   | Producto B |
| María  | Producto C |
| NULL   | Producto D |

FULL JOIN

El FULL JOIN devuelve todas las filas de ambas tablas, con coincidencias donde existan. Si no hay coincidencia, el resultado es NULL en la tabla donde no existe.

AB
sql
SELECT usuarios.nombre, pedidos.producto
FROM usuarios
FULL JOIN pedidos ON usuarios.id = pedidos.usuario_id;

Resultado:

bash
| nombre | producto   |
|--------|------------|
| Juan   | Producto A |
| Juan   | Producto B |
| María  | Producto C |
| Pedro  | NULL       |
| Ana    | NULL       |
| NULL   | Producto D |

CROSS JOIN

El CROSS JOIN devuelve el producto cartesiano de ambas tablas, es decir, todas las combinaciones posibles de filas.

CROSS JOINAB
sql
SELECT usuarios.nombre, pedidos.producto
FROM usuarios
CROSS JOIN pedidos;

Resultado:

bash
| nombre | producto   |
|--------|------------|
| Juan   | Producto A |
| Juan   | Producto B |
| Juan   | Producto C |
| Juan   | Producto D |
| María  | Producto A |
| María  | Producto B |
| María  | Producto C |
| María  | Producto D |
| Pedro  | Producto A |
| Pedro  | Producto B |
| Pedro  | Producto C |
| Pedro  | Producto D |
| Ana    | Producto A |
| Ana    | Producto B |
| Ana    | Producto C |
| Ana    | Producto D |