Contenido de esta guía
Qué conserva RIGHT JOIN
RIGHT JOIN devuelve todas las filas de la tabla escrita a la derecha. Cuando una de esas filas no encuentra pareja en la tabla izquierda, las columnas izquierdas reciben NULL.
Es la imagen inversa de LEFT JOIN. La misma pregunta suele poder escribirse intercambiando las tablas y usando LEFT JOIN, una forma que muchos equipos consideran más fácil de leer.
Sintaxis y equivalencia
SELECT columnas
FROM tabla_izquierda AS i
RIGHT JOIN tabla_derecha AS d
ON i.clave = d.clave;SELECT columnas
FROM tabla_derecha AS d
LEFT JOIN tabla_izquierda AS i
ON i.clave = d.clave;Ejemplo guiado
Los tres objetivos aparecen porque están a la derecha. Soporte no tiene avance y recibe NULL. El avance con identificador 4 desaparece porque no existe un objetivo derecho relacionado.
| id | nombre | porcentaje |
|---|---|---|
| 1 | Ventas | 80 |
| 2 | Soporte | NULL |
| 3 | Legal | 50 |
WITH objetivos(id, nombre) AS (
VALUES (1, 'Ventas'), (2, 'Soporte'), (3, 'Legal')
), avance(objetivo_id, porcentaje) AS (
VALUES (1, 80), (3, 50), (4, 20)
)
SELECT o.id, o.nombre, a.porcentaje
FROM avance AS a
RIGHT JOIN objetivos AS o
ON a.objetivo_id = o.id
ORDER BY o.id;Error frecuente
Perder de vista qué tabla se conserva
En consultas largas, leer de derecha a izquierda aumenta la carga mental. Si el equipo trabaja principalmente con LEFT JOIN, invierte las tablas y conserva una dirección de lectura uniforme.
El cambio no consiste en sustituir una palabra: también debes intercambiar el orden de las tablas y mantener la condición correcta.
Comprueba lo aprendido
Convierte RIGHT JOIN en LEFT JOIN
Reescribe el ejemplo anterior con objetivos a la izquierda, sin cambiar el conjunto de filas.
FROM objetivos AS o.avance a la derecha.a.objetivo_id = o.id.Solución razonada
WITH objetivos(id, nombre) AS (
VALUES (1, 'Ventas'), (2, 'Soporte'), (3, 'Legal')
), avance(objetivo_id, porcentaje) AS (
VALUES (1, 80), (3, 50), (4, 20)
)
SELECT o.id, o.nombre, a.porcentaje
FROM objetivos AS o
LEFT JOIN avance AS a
ON a.objetivo_id = o.id
ORDER BY o.id;Al invertir los conjuntos, objetivos pasa al lado izquierdo y sigue conservándose completo. La condición relaciona las mismas claves.
Compatibilidad entre motores
PostgreSQL, MySQL y SQL Server admiten RIGHT JOIN. SQLite lo incorporó en la versión 3.39.0; instalaciones anteriores necesitan la reescritura equivalente con LEFT JOIN. Antes de publicar una consulta, comprueba la versión real del motor que la ejecutará.
Qué debes recordar
- La tabla derecha conserva todas sus filas.
- Las columnas izquierdas reciben
NULLcuando no hay pareja. - Puede reescribirse intercambiando tablas y usando
LEFT JOIN. - SQLite requiere la versión 3.39.0 o posterior para la sintaxis directa.