SQL
Tutorial SQL: Uso de INNER JOIN, LEFT JOIN, RIGHT JOIN, FULL JOIN
Aprende a usar inner join, left join, right join y full join en SQL para combinar tablas y optimizar consultas con ejemplos prácticos.
Aprende SQL y certifícateEstructura INNER JOIN
El INNER JOIN es una de las operaciones fundamentales en SQL que permite combinar filas de dos o más tablas basándose en una condición de coincidencia entre ellas. Esta operación es esencial cuando necesitamos recuperar datos relacionados que están distribuidos en diferentes tablas de nuestra base de datos.
La sintaxis básica de un INNER JOIN sigue una estructura clara y consistente que podemos aplicar tanto en MySQL como en PostgreSQL:
SELECT columnas
FROM tabla1
INNER JOIN tabla2 ON tabla1.columna = tabla2.columna;
Vamos a analizar cada componente de esta estructura:
Cláusula SELECT
En la cláusula SELECT especificamos las columnas que queremos recuperar. Podemos seleccionar columnas de ambas tablas utilizando la notación tabla.columna
:
SELECT empleados.nombre, departamentos.nombre
FROM empleados
INNER JOIN departamentos ON empleados.id_departamento = departamentos.id;
También podemos utilizar alias para hacer nuestras consultas más legibles:
SELECT e.nombre, d.nombre AS nombre_departamento
FROM empleados e
INNER JOIN departamentos d ON e.id_departamento = d.id;
Cláusula FROM
La cláusula FROM especifica la tabla principal desde la que comenzamos nuestra consulta. Esta es la tabla "izquierda" en la operación de JOIN.
Cláusula INNER JOIN
La parte INNER JOIN indica la segunda tabla (o tabla "derecha") que queremos combinar con la primera. La palabra clave INNER es opcional en muchos sistemas de bases de datos, por lo que a menudo verás simplemente JOIN
en lugar de INNER JOIN
, aunque ambas formas son equivalentes:
-- Estas dos consultas son equivalentes
SELECT e.nombre, d.nombre
FROM empleados e
INNER JOIN departamentos d ON e.id_departamento = d.id;
SELECT e.nombre, d.nombre
FROM empleados e
JOIN departamentos d ON e.id_departamento = d.id;
Condición ON
La cláusula ON es crucial, ya que define la condición de coincidencia entre las tablas. Esta condición generalmente compara una clave primaria en una tabla con una clave foránea en la otra:
ON tabla1.columna = tabla2.columna
Esta condición determina qué filas se combinarán. Solo las filas que satisfacen esta condición aparecerán en el resultado final.
Funcionamiento del INNER JOIN
El INNER JOIN funciona de la siguiente manera:
- Examina cada fila de la primera tabla (tabla1)
- Para cada fila de tabla1, busca todas las filas en la segunda tabla (tabla2) que cumplen con la condición de coincidencia
- Cuando encuentra coincidencias, combina las filas de ambas tablas y las incluye en el resultado
- Si una fila de tabla1 no tiene coincidencias en tabla2, esa fila se excluye completamente del resultado
Este comportamiento es lo que hace que el INNER JOIN sea selectivo: solo devuelve datos donde existe una relación entre ambas tablas.
Ejemplo práctico
Supongamos que tenemos dos tablas: productos
y categorias
:
-- Tabla de categorías
CREATE TABLE categorias (
id INT PRIMARY KEY,
nombre VARCHAR(50) NOT NULL
);
-- Tabla de productos
CREATE TABLE productos (
id INT PRIMARY KEY,
nombre VARCHAR(100) NOT NULL,
precio DECIMAL(10, 2) NOT NULL,
id_categoria INT,
FOREIGN KEY (id_categoria) REFERENCES categorias(id)
);
-- Insertamos algunos datos de ejemplo
INSERT INTO categorias VALUES (1, 'Electrónica'), (2, 'Ropa'), (3, 'Alimentos');
INSERT INTO productos VALUES
(1, 'Smartphone', 599.99, 1),
(2, 'Laptop', 999.99, 1),
(3, 'Camiseta', 19.99, 2),
(4, 'Pantalón', 39.99, 2),
(5, 'Manzanas', 3.99, 3);
Para obtener una lista de productos con sus respectivas categorías, usaríamos un INNER JOIN:
SELECT p.id, p.nombre, p.precio, c.nombre AS categoria
FROM productos p
INNER JOIN categorias c ON p.id_categoria = c.id;
El resultado sería:
id | nombre | precio | categoria
---+------------+---------+------------
1 | Smartphone | 599.99 | Electrónica
2 | Laptop | 999.99 | Electrónica
3 | Camiseta | 19.99 | Ropa
4 | Pantalón | 39.99 | Ropa
5 | Manzanas | 3.99 | Alimentos
Múltiples INNER JOIN
Podemos encadenar varios INNER JOIN para combinar más de dos tablas:
SELECT c.nombre AS cliente, p.nombre AS producto, v.fecha
FROM clientes c
INNER JOIN ventas v ON c.id = v.id_cliente
INNER JOIN detalles_venta dv ON v.id = dv.id_venta
INNER JOIN productos p ON dv.id_producto = p.id;
En este ejemplo, estamos uniendo cuatro tablas para obtener información sobre qué clientes compraron qué productos y cuándo.
Condiciones adicionales
Podemos añadir condiciones adicionales usando la cláusula WHERE después del JOIN:
SELECT p.nombre, c.nombre AS categoria
FROM productos p
INNER JOIN categorias c ON p.id_categoria = c.id
WHERE p.precio > 50 AND c.nombre = 'Electrónica';
Esta consulta devolvería solo productos electrónicos con un precio superior a 50.
Consideraciones de rendimiento
Al trabajar con INNER JOIN, es importante tener en cuenta:
- Las columnas utilizadas en la condición ON deberían estar indexadas para mejorar el rendimiento, especialmente en tablas grandes.
- El orden de las tablas puede afectar al rendimiento. Generalmente, es mejor poner la tabla más pequeña primero.
- Para consultas complejas con múltiples JOIN, es recomendable analizar el plan de ejecución para identificar posibles cuellos de botella.
-- Ejemplo de creación de índice para mejorar rendimiento de JOIN
CREATE INDEX idx_productos_categoria ON productos(id_categoria);
Diferencia con otros tipos de JOIN
El INNER JOIN es selectivo y solo devuelve filas donde hay coincidencias en ambas tablas. Esto lo diferencia de otros tipos de JOIN:
- LEFT JOIN: Devuelve todas las filas de la tabla izquierda, incluso si no hay coincidencias en la tabla derecha.
- RIGHT JOIN: Devuelve todas las filas de la tabla derecha, incluso si no hay coincidencias en la tabla izquierda.
- FULL JOIN: Devuelve todas las filas cuando hay una coincidencia en cualquiera de las tablas.
La elección entre estos tipos depende de los requisitos específicos de la consulta y de si necesitamos incluir filas sin coincidencias.
Otros ejercicios de programación de SQL
Evalúa tus conocimientos de esta lección Uso de INNER JOIN, LEFT JOIN, RIGHT JOIN, FULL JOIN con nuestros retos de programación de tipo Test, Puzzle, Código y Proyecto con VSCode, guiados por IA.
Tipos de datos
Inserción de datos: INSERT INTO
Filtrado de grupos de resultados con HAVING
Uso de índices y particiones
Renombrar tablas y bases de datos: RENAME
Uso de vistas
Uso de INNER JOIN, LEFT JOIN, RIGHT JOIN, FULL JOIN
Agrupación de resultados con GROUP BY
Creación y uso de subqueries
Sentencias INSERT
Copias de seguridad y restauración de bases de datos
Uso de INNER JOIN, LEFT JOIN, RIGHT JOIN, FULL JOIN
Instalación de MySQL
Relaciones entre tablas
Eliminación de datos: DELETE
Creación de bases de datos y tablas: CREATE DATABASE, CREATE TABLE
Creación y uso de funciones
Creación de tablas e inserción de datos con SQL
Uso de funciones agregadas: COUNT, SUM, AVG, MAX, MIN
Optimización de consultas
Introducción a SQL
Triggers y eventos
Clasificación de resultados con ORDER BY
Alterar la estructura de tablas existentes: ALTER TABLE
Eliminación de datos: DELETE
Instalación de PostgreSQL
Creación y uso de procedimientos almacenados
Consultas básicas de selección: SELECT y WHERE
Vaciar tablas y bases de datos: DROP
Actualización de datos: UPDATE
Creación y manejo de usuarios y roles
Consultas básicas de selección SELECT y WHERE
Creación de bases de datos y tablas
Bases de datos y tablas
Actualización de datos: UPDATE
Relaciones entre tablas
Filtrado de valores únicos con DISTINCT
Asignación y gestión de permisos
Todas las lecciones de SQL
Accede a todas las lecciones de SQL y aprende con ejemplos prácticos de código y ejercicios de programación con IDE web sin instalar nada.
Introducción A Sql
Introducción Y Entorno
Ddl Y Dml
Introducción Y Entorno
Instalación De Mysql
Introducción Y Entorno
Instalación De Postgresql
Introducción Y Entorno
Tipos De Datos
Introducción Y Entorno
Bases De Datos Y Tablas
Introducción Y Entorno
Sistemas De Gestión De Bases De Datos
Introducción Y Entorno
Tipos De Bases De Datos
Introducción Y Entorno
Creación De Bases De Datos Y Tablas: Create Database, Create Table
Sintaxis Dml Crud
Consultas Básicas De Selección: Select Y Where
Sintaxis Dml Crud
Inserción De Datos: Insert Into
Sintaxis Dml Crud
Actualización De Datos: Update
Sintaxis Dml Crud
Eliminación De Datos: Delete
Sintaxis Dml Crud
Introducción A Dml
Sintaxis Dml Crud
Consultar Datos: Select
Sintaxis Dml Crud
Clasificación De Resultados Con Order By
Filtros Y Clasificación
Filtrado De Valores Únicos Con Distinct
Filtros Y Clasificación
Paginación Con Limit Y Offset
Filtros Y Clasificación
Alterar La Estructura De Tablas Existentes: Alter Table
Sintaxis Ddl
Renombrar Tablas Y Bases De Datos: Rename
Sintaxis Ddl
Vaciar Tablas Y Bases De Datos: Drop
Sintaxis Ddl
Uso De Funciones Agregadas: Count, Sum, Avg, Max, Min
Funciones Y Agrupación
Agrupación De Resultados Con Group By
Funciones Y Agrupación
Filtrado De Grupos De Resultados Con Having
Funciones Y Agrupación
Funciones Numéricas Y Matemáticas
Funciones Y Agrupación
Funciones De Fecha Y Hora
Funciones Y Agrupación
Funciones De Texto
Funciones Y Agrupación
Many To One
Asociaciones Entre Tablas
One To Many
Asociaciones Entre Tablas
One To One
Asociaciones Entre Tablas
Many To Many
Asociaciones Entre Tablas
Relaciones Entre Tablas
Joins Y Subqueries
Uso De Inner Join, Left Join, Right Join, Full Join
Joins Y Subqueries
Creación Y Uso De Subqueries
Joins Y Subqueries
Left Join Y Right Join
Joins Y Subqueries
Full Join
Joins Y Subqueries
Cross Join Y Self Join
Joins Y Subqueries
Optimización De Consultas
Sintaxis Avanzada
Uso De Índices Y Particiones
Sintaxis Avanzada
Uso De Vistas
Sintaxis Avanzada
Triggers Y Eventos
Sintaxis Avanzada
Particiones
Sintaxis Avanzada
Restricciones E Integridad
Sintaxis Avanzada
Transacciones
Sintaxis Avanzada
Vistas Materializadas
Sintaxis Avanzada
Rollback
Sintaxis Avanzada
Vistas Con Create View
Sintaxis Avanzada
Principios Acid
Sintaxis Avanzada
Manejo De Errores Y Excepciones
Sintaxis Avanzada
Funciones Ventana
Sintaxis Avanzada
Índices
Sintaxis Avanzada
Expresiones De Tabla Comunes (Cte) Con With
Sintaxis Avanzada
Creación Y Uso De Funciones
Programación En Sql
Creación Y Uso De Procedimientos Almacenados
Programación En Sql
Variables Y Control De Flujo
Programación En Sql
Creación Y Manejo De Usuarios Y Roles
Seguridad Y Administración
Asignación Y Gestión De Permisos
Seguridad Y Administración
Copias De Seguridad Y Restauración De Bases De Datos
Seguridad Y Administración
En esta lección
Objetivos de aprendizaje de esta lección
- Comprender la estructura y sintaxis básica del INNER JOIN en SQL.
- Aprender a combinar filas de dos o más tablas usando condiciones de coincidencia.
- Diferenciar entre INNER JOIN, LEFT JOIN, RIGHT JOIN y FULL JOIN y sus usos.
- Aplicar alias y condiciones adicionales para consultas más legibles y específicas.
- Conocer consideraciones de rendimiento al usar JOINs en bases de datos.