Tipos de JOIN en SQL

Estructura de las Tablas

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. Ejemplo:

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 |

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.

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.

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.

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.

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 |