Gráffica Academy
Creado para la ComunidadAprende a programar
Escribir al equipo

Contacta con el equipo de Gráffica Estudio Academy.

IG @ X in
SQL · Módulo 8

Joins I: combinar tablas

Hasta hoy cada consulta ha mirado UNA sola tabla. Pero fíjate en la tabla pedidos: solo tiene cliente_id y producto_id, números sueltos sin nombre ni precio. Para saber "qué compró Ana" de verdad, necesitas cruzar tres tablas a la vez. Bienvenido al concepto más importante de todo el curso: los JOIN.

Por qué las tablas están separadas (y no deberían dejar de estarlo)

Podrías pensar: ¿por qué no meter el nombre del cliente directamente en cada fila de pedidos, y ahorrarnos este lío? Porque entonces, si Ana cambia de email, tendrías que actualizarlo en cada uno de sus pedidos, en vez de en un solo sitio. Separar los datos en tablas relacionadas —y usar cliente_id como referencia— es la base de todo diseño de bases de datos serio. JOIN es cómo volvemos a juntar esa información cuando la necesitamos.


INNER JOIN: solo lo que coincide en ambas tablas

INNER JOIN combina filas de dos tablas donde una condición se cumple —normalmente, que una clave foránea coincida con una clave primaria—. Si un pedido no tiene cliente correspondiente (no debería pasar, pero imagina que sí), simplemente no aparece en el resultado.

inner-join.sql
1
Pulsa "Ejecutar" para ver el resultado.
💡 Consejo

Fíjate en la sintaxis: FROM pedidos p le da a la tabla pedidos el alias corto p, y clientes c hace lo mismo. Después, cada columna se escribe como p.cantidad o c.nombre — imprescindible en cuanto dos tablas comparten un nombre de columna (como id), y una costumbre que merece la pena mantener siempre por claridad.

Puedes encadenar más de un JOIN para traer datos de tres tablas a la vez:

doble-join.sql
1
Pulsa "Ejecutar" para ver el resultado.

LEFT JOIN: todo de la izquierda, coincida o no

LEFT JOIN mantiene todas las filas de la tabla de la izquierda (la que va después de FROM), tengan o no coincidencia en la tabla de la derecha. Cuando no hay coincidencia, las columnas de la derecha aparecen como NULL.

left-join.sql
1
Pulsa "Ejecutar" para ver el resultado.

Esta última consulta responde una pregunta de negocio real, y es el motivo por el que existe LEFT JOIN: "¿qué productos no ha comprado nunca nadie?". Con INNER JOIN esto sería imposible de preguntar — un producto sin pedidos simplemente desaparecería del resultado en vez de mostrarse con NULL.

⚠️ Error común

Usar INNER JOIN cuando en realidad quieres LEFT JOIN. Si tu resultado tiene menos filas de las que esperabas, sospecha primero de esto: es la causa más habitual de "bugs" en informes con JOINs. Pregúntate: "¿de esta tabla quiero todas las filas, aunque no tengan pareja en la otra?". Si la respuesta es sí, es LEFT JOIN, no INNER.


Ponlo a prueba

Comprueba lo que has aprendido

3 preguntas · sin nota, solo para afianzar lo de hoy

1. ¿Qué hace un INNER JOIN?

2. Quieres una lista de TODOS los productos, incluso los que nunca se han pedido. ¿Qué usas?

3. En un LEFT JOIN, cuando no hay coincidencia en la tabla derecha, ¿qué aparece en esas columnas?

Síguenos IG @ X in