Los JOIN de SQL explicados con ejemplos (Inner, Left, Right, Full)

  1. Inicio
  2. Blog
  3. Bases de datos y SQL

Bases de datos y SQL

Los JOIN de SQL explicados con ejemplos (Inner, Left, Right, Full)

Aprende los JOIN INNER, LEFT, RIGHT, FULL, CROSS y SELF con dos tablas pequeñas, consultas claras y los resultados exactos que debes esperar.

Por Stack QuoraActualizado el 29 oct 20268 min de lectura
JOIN de SQL explicados con ejemplos: inner, left, right, full, cross y self

Ideas clave

  • INNER JOIN: solo las filas que coinciden en ambas tablas.
  • LEFT JOIN: todas las filas de la tabla izquierda, más las coincidencias (NULL si no hay).
  • RIGHT JOIN: todas las filas de la tabla derecha, más las coincidencias.
  • FULL JOIN: todas las filas de ambas tablas, emparejadas cuando es posible.
  • Une por claves, usa alias de tabla e indexa las columnas del JOIN.

Las bases de datos reales nunca guardan todo en una sola tabla. Los clientes están en una tabla y los pedidos en otra. Para responder “¿qué clientes hicieron pedidos este mes?” hay que combinarlas, y eso es lo que hacen los JOIN de SQL.

Esta guía de JOIN de SQL es práctica. Los JOIN confunden a muchos principiantes porque las mismas dos tablas dan resultados distintos según el tipo de JOIN. Cuando los ves con datos pequeños y concretos, se vuelven fáciles.

JOIN de SQL explicados: las tablas de ejemplo

customers

id name
1 Asha
2 Ben
3 Chitra

orders

id customer_id total
101 1 250
102 1 120
103 2 90
104 9 40

Chitra no tiene pedidos, y el pedido 104 apunta a un cliente (9) que no existe. Estos dos casos límite muestran la diferencia entre los tipos de JOIN.

INNER JOIN

Un INNER JOIN devuelve solo las filas donde la condición coincide en ambas tablas. Las filas sin pareja se descartan.

SELECT c.name, o.id AS order_id, o.total
FROM customers c
INNER JOIN orders o ON o.customer_id = c.id;

Resultado: Asha (101), Asha (102), Ben (103). Faltan Chitra y el pedido 104. Úsalo cuando solo te interesen los datos relacionados, como los pedidos con los datos de su cliente. JOIN a secas significa INNER JOIN.

LEFT JOIN

Un LEFT JOIN conserva todas las filas de la tabla izquierda y añade las filas coincidentes de la derecha. Donde no hay coincidencia, las columnas de la derecha son NULL.

SELECT c.name, o.id AS order_id, o.total
FROM customers c
LEFT JOIN orders o ON o.customer_id = c.id;

Resultado: Asha (101), Asha (102), Ben (103), Chitra (NULL, NULL). Ahora Chitra aparece.

Consejo rápido: para encontrar clientes que nunca compraron, filtra por NULL en el lado derecho: WHERE o.id IS NULL devuelve a Chitra. Los testers lo usan para encontrar registros huérfanos o faltantes.

RIGHT JOIN y FULL JOIN

Un RIGHT JOIN es el espejo de un LEFT JOIN y conserva todas las filas de la tabla derecha. La mayoría invierte el orden de las tablas y usa LEFT JOIN porque se lee de forma más natural.

SELECT c.name, o.id AS order_id
FROM customers c
RIGHT JOIN orders o ON o.customer_id = c.id;

El resultado incluye el pedido 104 con el nombre de cliente NULL. Un FULL (OUTER) JOIN devuelve todas las filas de ambas tablas: Chitra sin pedido y el pedido 104 sin cliente.

SELECT c.name, o.id AS order_id
FROM customers c
FULL OUTER JOIN orders o ON o.customer_id = c.id;

PostgreSQL y SQL Server lo admiten. MySQL no, así que combina un LEFT JOIN y un RIGHT JOIN con UNION. Para más información, el manual de PostgreSQL tiene un tutorial de joins muy claro.

Join Filas solo izquierda Filas solo derecha Coincidencias
INNER No No Sí
LEFT Sí No Sí
RIGHT No Sí Sí
FULL Sí Sí Sí

CROSS JOIN y SELF JOIN

Un CROSS JOIN empareja cada fila de una tabla con cada fila de la otra: tres clientes y cuatro pedidos dan doce filas. Es poco frecuente, pero útil para generar combinaciones, como datos de prueba para cada talla y color.

SELECT c.name, o.id
FROM customers c
CROSS JOIN orders o;

Un SELF JOIN une una tabla consigo misma mediante alias, por ejemplo para encontrar al jefe de cada empleado.

SELECT e.name AS employee, m.name AS manager
FROM employees e
LEFT JOIN employees m ON e.manager_id = m.id;

JOIN de SQL: errores comunes y consejos de rendimiento

  • Olvidar la cláusula ON crea un CROSS JOIN sin querer y dispara el número de filas.
  • Filtrar la tabla derecha en WHERE después de un LEFT JOIN lo convierte en INNER JOIN; pon la condición en la cláusula ON.
  • Nombres de columna ambiguos: antepón alias de tabla a las columnas.
  • Unir por columnas no únicas multiplica filas e infla los totales.
  • Indexa las columnas usadas en los joins, selecciona solo las columnas necesarias y revisa las consultas lentas con EXPLAIN.

Por qué importan los joins para los testers

Los ingenieros de QA usan joins para verificar que los datos creados desde la interfaz o una API llegaron correctamente a la base de datos y para encontrar registros huérfanos. Combínalo con nuestra guía de pruebas de API con Postman. Para lo básico, consulta el tutorial de SQL para principiantes, y para almacenes de datos más nuevos lee sobre las bases de datos vectoriales. Para ejecutar una base de datos en local, mira nuestro tutorial de Docker.

Reflexiones finales

Los JOIN de SQL en una línea: INNER conserva solo las coincidencias, LEFT conserva todo lo de la izquierda, RIGHT todo lo de la derecha y FULL conserva todo. Practica con dos tablas pequeñas hasta poder predecir el resultado antes de ejecutar la consulta; luego prueba a unir tres tablas y a combinar joins con GROUP BY.

Preguntas frecuentes

¿Cuál es la diferencia entre INNER JOIN y LEFT JOIN?

INNER JOIN devuelve solo las filas coincidentes de ambas tablas. LEFT JOIN devuelve todas las filas de la tabla izquierda y rellena con NULL las columnas de la derecha sin coincidencia.

¿Qué JOIN de SQL es el más rápido?

Ningún tipo de JOIN es siempre el más rápido. El rendimiento depende de los índices, el tamaño de las tablas y el plan de consulta. Indexa las columnas del join y revisa el plan de ejecución.

¿MySQL admite FULL OUTER JOIN?

No. En MySQL, combina un LEFT JOIN y un RIGHT JOIN con UNION para obtener el mismo resultado.

¿Para qué sirve un self join?

Un self join compara filas de la misma tabla, por ejemplo para encontrar al jefe de cada empleado en una única tabla employees.

¿Por qué mi join devuelve filas duplicadas?

Los duplicados suelen aparecer cuando la columna del join no es única en una de las tablas. Revisa tus claves o agrega los datos antes de unirlos.

Sigue aprendiendo

Trabaja con Stack Quora

¿Necesitas ayuda con testing, WordPress o SEO?

Ayudamos a los equipos a lanzar mejor software y a hacer crecer sus sitios. Cuéntanos en qué trabajas y te sugeriremos un siguiente paso claro.