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:

  1. MySQL toma cada fila de la tabla derecha.
  2. Para cada una, busca en la tabla izquierda las filas que cumplan la condición del ON.
  3. Si encuentra coincidencias, combina las columnas de ambas filas.
  4. 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;
productocategoria
Cable USB-C a LightningAccesorios electrónicos
Cargador USB-C 65WAccesorios electrónicos
Funda iPhone siliconaAccesorios electrónicos
Camiseta algodón básicaCamisetas
Camiseta técnica runningCamisetas
Robot de cocinaCocina
Sartén antiadherente 28cmCocina
NULLDeportes
NULLElectrónica
Banda elástica set x5Fitness
Esterilla yoga premiumFitness
Mancuernas ajustablesFitness

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;
clientepedidoempleadopuesto
NULLNULLAlbertoDirector de Logística
NULLNULLCristinaResponsable de Almacén
Carlos2DanielVendedor
Laura6DanielVendedor
Carlos9DanielVendedor
Lucía12DanielVendedor
Sara15DanielVendedor
María17DanielVendedor
Isabel20DanielVendedor
Paula23DanielVendedor
NULLNULLInésOperaria de Almacén
NULLNULLMarcosOperario de Almacén
María1NataliaVendedora Senior
Ana3NataliaVendedora Senior
Pedro5NataliaVendedora Senior
Carmen8NataliaVendedora Senior
Javier10NataliaVendedora Senior
Miguel13NataliaVendedora Senior
Andrés16NataliaVendedora Senior
Roberto19NataliaVendedora Senior
David21NataliaVendedora Senior
Alejandro24NataliaVendedora Senior
María4PatriciaVendedora
David7PatriciaVendedora
Ana11PatriciaVendedora
Pedro14PatriciaVendedora
Elena18PatriciaVendedora
Fernando22PatriciaVendedora
Marta25PatriciaVendedora
NULLNULLRaúlVendedor Junior
NULLNULLRicardoDirector General
NULLNULLSofíaDirectora 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