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ícate

Estructura 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:

  1. Examina cada fila de la primera tabla (tabla1)
  2. Para cada fila de tabla1, busca todas las filas en la segunda tabla (tabla2) que cumplen con la condición de coincidencia
  3. Cuando encuentra coincidencias, combina las filas de ambas tablas y las incluye en el resultado
  4. 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.

Aprende SQL online

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

Test

Inserción de datos: INSERT INTO

Test

Filtrado de grupos de resultados con HAVING

Test

Uso de índices y particiones

Test

Renombrar tablas y bases de datos: RENAME

Test

Uso de vistas

Test

Uso de INNER JOIN, LEFT JOIN, RIGHT JOIN, FULL JOIN

Test

Agrupación de resultados con GROUP BY

Test

Creación y uso de subqueries

Test

Sentencias INSERT

Código

Copias de seguridad y restauración de bases de datos

Test

Uso de INNER JOIN, LEFT JOIN, RIGHT JOIN, FULL JOIN

Código

Instalación de MySQL

Test

Relaciones entre tablas

Código

Eliminación de datos: DELETE

Test

Creación de bases de datos y tablas: CREATE DATABASE, CREATE TABLE

Test

Creación y uso de funciones

Test

Creación de tablas e inserción de datos con SQL

Proyecto

Uso de funciones agregadas: COUNT, SUM, AVG, MAX, MIN

Test

Optimización de consultas

Test

Introducción a SQL

Test

Triggers y eventos

Test

Clasificación de resultados con ORDER BY

Test

Alterar la estructura de tablas existentes: ALTER TABLE

Test

Eliminación de datos: DELETE

Código

Instalación de PostgreSQL

Test

Creación y uso de procedimientos almacenados

Test

Consultas básicas de selección: SELECT y WHERE

Test

Vaciar tablas y bases de datos: DROP

Test

Actualización de datos: UPDATE

Test

Creación y manejo de usuarios y roles

Test

Consultas básicas de selección SELECT y WHERE

Código

Creación de bases de datos y tablas

Código

Bases de datos y tablas

Test

Actualización de datos: UPDATE

Código

Relaciones entre tablas

Test

Filtrado de valores únicos con DISTINCT

Test

Asignación y gestión de permisos

Test

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

Accede GRATIS a SQL y certifícate

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.