RIGHT JOIN
El RIGHT JOIN (también llamado RIGHT OUTER JOIN) es el espejo del LEFT JOIN. Devuelve todas las filas de la tabla derecha (la que aparece después de RIGHT JOIN), tengan o no correspondencia en la tabla izquierda. Cuando no hay coincidencia, las columnas de la tabla izquierda se rellenan con NULL.
En la práctica, cualquier consulta con RIGHT JOIN puede reescribirse como un LEFT JOIN simplemente invirtiendo el orden de las tablas. Por este motivo, la gran mayoría de desarrolladores y guías de estilo SQL prefieren usar LEFT JOIN exclusivamente, por consistencia y legibilidad.
Sintaxis
SELECT columnas
FROM tabla_izquierda
RIGHT JOIN tabla_derecha ON tabla_izquierda.columna = tabla_derecha.columna;La tabla derecha (después de RIGHT JOIN) es la que se preserva completa. La tabla izquierda (después de FROM) puede aportar NULLs cuando no hay coincidencia.
Cómo funciona
El proceso es idéntico al LEFT JOIN, pero invirtiendo los roles:
- MySQL toma cada fila de la tabla derecha.
- Para cada una, busca en la tabla izquierda las filas que cumplan la condición del
ON. - Si encuentra coincidencias, combina las columnas de ambas filas.
- Si no encuentra coincidencia, la fila de la tabla derecha se mantiene, y las columnas de la tabla izquierda se llenan con
NULL.
Ejemplo básico
Todas las categorías con sus productos. Las categorías que no tienen productos directamente asignados (las categorías padre) también aparecen:
SELECT
p.nombre AS producto,
c.nombre AS categoria
FROM productos p
RIGHT JOIN categorias c ON p.categoria_id = c.id
ORDER BY c.nombre, p.nombre
LIMIT 12;| producto | categoria |
|---|---|
| Cable USB-C a Lightning | Accesorios electrónicos |
| Cargador USB-C 65W | Accesorios electrónicos |
| Funda iPhone silicona | Accesorios electrónicos |
| Camiseta algodón básica | Camisetas |
| Camiseta técnica running | Camisetas |
| Robot de cocina | Cocina |
| Sartén antiadherente 28cm | Cocina |
| NULL | Deportes |
| NULL | Electrónica |
| Banda elástica set x5 | Fitness |
| Esterilla yoga premium | Fitness |
| Mancuernas ajustables | Fitness |
Las categorías Deportes y Electrónica aparecen con NULL en la columna producto porque son categorías padre: ningún producto las referencia directamente. Con un INNER JOIN, estas filas no existirían. Con un RIGHT JOIN, la tabla categorias (tabla derecha) se preserva completa.
Equivalencia con LEFT JOIN
Toda consulta con RIGHT JOIN tiene una versión equivalente con LEFT JOIN. Solo hay que intercambiar el orden de las tablas:
-- Con RIGHT JOIN
SELECT p.nombre AS producto, c.nombre AS categoria
FROM productos p
RIGHT JOIN categorias c ON p.categoria_id = c.id;
-- Equivalente con LEFT JOIN (intercambiando tablas)
SELECT p.nombre AS producto, c.nombre AS categoria
FROM categorias c
LEFT JOIN productos p ON p.categoria_id = c.id;Ambas consultas producen exactamente el mismo resultado. La única diferencia es qué tabla aparece primero en la cláusula FROM.
Encontrar categorías sin productos
El patrón de "encontrar registros sin correspondencia" también funciona con RIGHT JOIN:
SELECT c.nombre AS categoria
FROM productos p
RIGHT JOIN categorias c ON p.categoria_id = c.id
WHERE p.id IS NULL
ORDER BY c.nombre;| categoria |
|---|
| Deportes |
| Electrónica |
| Hogar |
| Libros |
| Ropa |
Son las 5 categorías padre que no tienen productos asignados directamente. La versión con LEFT JOIN sería:
SELECT c.nombre AS categoria
FROM categorias c
LEFT JOIN productos p ON c.id = p.categoria_id
WHERE p.id IS NULL
ORDER BY c.nombre;El resultado es idéntico.
Cuándo usar RIGHT JOIN
Hay un escenario donde RIGHT JOIN puede resultar más natural que reordenar las tablas: cuando estás encadenando varios JOINs y necesitas que la última tabla se preserve completa:
SELECT
cl.nombre AS cliente,
p.id AS pedido,
e.nombre AS empleado,
e.puesto
FROM clientes cl
INNER JOIN pedidos p ON cl.id = p.cliente_id
RIGHT JOIN empleados e ON p.empleado_id = e.id
ORDER BY e.nombre;| cliente | pedido | empleado | puesto |
|---|---|---|---|
| NULL | NULL | Alberto | Director de Logística |
| NULL | NULL | Cristina | Responsable de Almacén |
| Carlos | 2 | Daniel | Vendedor |
| Laura | 6 | Daniel | Vendedor |
| Carlos | 9 | Daniel | Vendedor |
| Lucía | 12 | Daniel | Vendedor |
| Sara | 15 | Daniel | Vendedor |
| María | 17 | Daniel | Vendedor |
| Isabel | 20 | Daniel | Vendedor |
| Paula | 23 | Daniel | Vendedor |
| NULL | NULL | Inés | Operaria de Almacén |
| NULL | NULL | Marcos | Operario de Almacén |
| María | 1 | Natalia | Vendedora Senior |
| Ana | 3 | Natalia | Vendedora Senior |
| Pedro | 5 | Natalia | Vendedora Senior |
| Carmen | 8 | Natalia | Vendedora Senior |
| Javier | 10 | Natalia | Vendedora Senior |
| Miguel | 13 | Natalia | Vendedora Senior |
| Andrés | 16 | Natalia | Vendedora Senior |
| Roberto | 19 | Natalia | Vendedora Senior |
| David | 21 | Natalia | Vendedora Senior |
| Alejandro | 24 | Natalia | Vendedora Senior |
| María | 4 | Patricia | Vendedora |
| David | 7 | Patricia | Vendedora |
| Ana | 11 | Patricia | Vendedora |
| Pedro | 14 | Patricia | Vendedora |
| Elena | 18 | Patricia | Vendedora |
| Fernando | 22 | Patricia | Vendedora |
| Marta | 25 | Patricia | Vendedora |
| NULL | NULL | Raúl | Vendedor Junior |
| NULL | NULL | Ricardo | Director General |
| NULL | NULL | Sofía | Directora de Ventas |
El RIGHT JOIN con empleados garantiza que todos los empleados aparezcan, incluidos los que no han gestionado ningún pedido (directivos, personal de almacén y Raúl, que es vendedor junior). Reescribir esta consulta con LEFT JOIN requeriría reorganizar toda la cadena de JOINs.
Por qué se prefiere LEFT JOIN
A pesar de que RIGHT JOIN es perfectamente válido, la convención en la industria es usar LEFT JOIN casi exclusivamente. Las razones son prácticas:
Al leer SQL, la mayoría de desarrolladores esperan que la tabla "principal" esté en el FROM y las tablas secundarias se vayan añadiendo con JOINs. El LEFT JOIN sigue esta lógica natural: la tabla que quieres preservar va primero. Con RIGHT JOIN, la tabla principal está al final de la cláusula JOIN, lo que resulta menos intuitivo.
En consultas con múltiples JOINs, mezclar LEFT y RIGHT hace el código difícil de seguir. Usar solo LEFT JOIN mantiene una dirección consistente: siempre se preserva la tabla de la izquierda.
Muchas guías de estilo SQL empresariales prohíben explícitamente el uso de RIGHT JOIN por estas razones de legibilidad.
En el siguiente artículo exploraremos el CROSS JOIN, un tipo de unión fundamentalmente diferente que genera todas las combinaciones posibles entre dos tablas.
Escrito por Eduardo Lázaro
