Qué problema solucionan realmente los JOINs
Imagina una empresa que tiene una tabla llamada clientes con nombres, emails y ciudades. Luego tiene otra tabla llamada pedidos con fechas, importes y estados.
El problema es que ninguna tabla tiene toda la información. Si quieres saber cuánto ha comprado cada cliente necesitas unir ambas. Ahí aparece el JOIN.
La idea básica es sencilla: SQL busca una columna común entre dos tablas y utiliza ese dato para relacionarlas. Normalmente suele ser un identificador como id_cliente.
INNER JOIN: cuando solo quieres coincidencias
El INNER JOIN es el más utilizado. Devuelve únicamente los registros que existen en ambas tablas.
SELECT clientes.nombre,
pedidos.fecha,
pedidos.importe
FROM clientes
INNER JOIN pedidos
ON clientes.id_cliente = pedidos.id_cliente; En este ejemplo, si un cliente existe pero nunca ha comprado nada, no aparecerá en el resultado. SQL se queda únicamente con aquellos registros donde encuentra coincidencia.
Es perfecto para informes como "ventas realizadas", "clientes con pedidos" o "productos vendidos".
LEFT JOIN: el favorito para detectar información que falta
Aquí cambia la película. El LEFT JOIN mantiene todos los registros de la tabla izquierda aunque no tengan coincidencia en la derecha.
SELECT clientes.nombre,
pedidos.importe
FROM clientes
LEFT JOIN pedidos
ON clientes.id_cliente = pedidos.id_cliente; Si tienes 1.000 clientes y solo 700 han comprado, el resultado seguirá mostrando los 1.000 clientes. Los 300 restantes aparecerán con valores vacíos en la parte de pedidos.
En una oficina esto se utiliza muchísimo para encontrar cosas como:
- Clientes registrados pero sin compras.
- Empleados sin asignación de proyectos.
- Productos que nunca se han vendido.
RIGHT JOIN: igual que LEFT pero al revés
El RIGHT JOIN hace exactamente lo contrario: mantiene todos los datos de la tabla derecha.
SELECT clientes.nombre,
pedidos.importe
FROM clientes
RIGHT JOIN pedidos
ON clientes.id_cliente = pedidos.id_cliente; En la práctica se usa menos porque casi siempre puedes cambiar el orden de las tablas y conseguir el mismo resultado utilizando un LEFT JOIN, que suele ser más fácil de leer.
Ejemplo real: informe mensual de ventas
Supongamos que el departamento comercial necesita un listado con el nombre del cliente, la fecha del pedido y el importe total.
SELECT c.nombre_cliente,
p.fecha_pedido,
p.total
FROM clientes c
INNER JOIN pedidos p
ON c.id_cliente = p.id_cliente
WHERE p.estado = 'Completado'; Primero unimos las tablas, después filtramos los pedidos completados. Esta estructura es la que normalmente verás en consultas profesionales.
Errores comunes usando JOINs
- Hacer un JOIN sin indicar correctamente la relación con
ON. Esto puede generar miles de filas duplicadas. - Confundir LEFT JOIN con INNER JOIN. Si necesitas mantener registros sin coincidencia, INNER JOIN los elimina.
- Unir columnas que no tienen el mismo tipo de dato. Un número y un texto aunque tengan el mismo valor pueden dar problemas.
- No revisar las claves utilizadas. Si
id_clienteno es único, el resultado puede multiplicarse.
Cómo elegir rápidamente qué JOIN necesitas
Una forma sencilla de pensarlo:
Si quieres "solo lo que coincide" → INNER JOIN.
Si quieres "todo lo de mi tabla principal aunque falten datos" → LEFT JOIN.
Si necesitas todos los datos de la segunda tabla → RIGHT JOIN.
Pro Tip
Cuando estés creando un JOIN complicado, empieza seleccionando solo los identificadores (id_cliente, id_pedido) para comprobar que la relación funciona. Después añade columnas poco a poco. Ahorrarás mucho tiempo buscando errores. Además, en muchos editores SQL puedes usar Ctrl + Enter para ejecutar rápidamente la consulta seleccionada.