SQL

Tutorial SQL: LEFT JOIN y RIGHT JOIN

Aprende cómo usar Left join y Right join en SQL y sus diferencias con Inner join para consultas eficientes y análisis completos de datos.

Aprende SQL y certifícate

LEFT JOIN

El LEFT JOIN es una operación fundamental en SQL que permite combinar filas de dos o más tablas basándose en una condición de relación, pero con una característica especial: conserva todos los registros de la tabla izquierda (la primera tabla mencionada), incluso cuando no existen coincidencias en la tabla derecha.

Sintaxis básica

La estructura básica de un LEFT JOIN es la siguiente:

SELECT columnas
FROM tabla_izquierda
LEFT JOIN tabla_derecha
ON tabla_izquierda.columna = tabla_derecha.columna;

En esta estructura, la tabla mencionada primero (tabla_izquierda) es la que mantiene todos sus registros en el resultado final, independientemente de si tienen correspondencia en la tabla_derecha.

Comportamiento del LEFT JOIN

Para entender mejor cómo funciona, veamos un ejemplo práctico. Supongamos que tenemos dos tablas: clientes y pedidos.

-- Estructura de la tabla clientes
CREATE TABLE clientes (
    id_cliente INT PRIMARY KEY,
    nombre VARCHAR(100),
    email VARCHAR(100)
);

-- Estructura de la tabla pedidos
CREATE TABLE pedidos (
    id_pedido INT PRIMARY KEY,
    id_cliente INT,
    fecha_pedido DATE,
    total DECIMAL(10,2),
    FOREIGN KEY (id_cliente) REFERENCES clientes(id_cliente)
);

Ahora, insertemos algunos datos de ejemplo:

-- Insertar clientes
INSERT INTO clientes VALUES (1, 'Ana García', 'ana@ejemplo.com');
INSERT INTO clientes VALUES (2, 'Carlos López', 'carlos@ejemplo.com');
INSERT INTO clientes VALUES (3, 'María Rodríguez', 'maria@ejemplo.com');
INSERT INTO clientes VALUES (4, 'Pedro Martínez', 'pedro@ejemplo.com');

-- Insertar pedidos (nota: el cliente 4 no tiene pedidos)
INSERT INTO pedidos VALUES (101, 1, '2023-01-15', 150.50);
INSERT INTO pedidos VALUES (102, 2, '2023-02-20', 75.25);
INSERT INTO pedidos VALUES (103, 1, '2023-03-10', 200.00);
INSERT INTO pedidos VALUES (104, 3, '2023-03-15', 125.75);

Si queremos obtener todos los clientes y sus pedidos, incluyendo aquellos que no han realizado ningún pedido, usaríamos un LEFT JOIN:

SELECT c.id_cliente, c.nombre, p.id_pedido, p.fecha_pedido, p.total
FROM clientes c
LEFT JOIN pedidos p
ON c.id_cliente = p.id_cliente;

El resultado sería:

id_cliente nombre id_pedido fecha_pedido total
1 Ana García 101 2023-01-15 150.50
1 Ana García 103 2023-03-10 200.00
2 Carlos López 102 2023-02-20 75.25
3 María Rodríguez 104 2023-03-15 125.75
4 Pedro Martínez NULL NULL NULL

Observa que Pedro Martínez (id_cliente = 4) aparece en el resultado aunque no tiene pedidos asociados. En su fila, los valores correspondientes a la tabla pedidos son NULL.

Casos de uso comunes

El LEFT JOIN es especialmente útil en varios escenarios:

  • Encontrar registros sin correspondencia: Permite identificar registros en la tabla izquierda que no tienen relación con la tabla derecha.
-- Clientes que no han realizado pedidos
SELECT c.id_cliente, c.nombre
FROM clientes c
LEFT JOIN pedidos p
ON c.id_cliente = p.id_cliente
WHERE p.id_pedido IS NULL;
  • Reportes completos: Cuando necesitas mostrar todos los registros de una entidad principal, incluso si no tienen datos relacionados.
-- Informe de todos los clientes con el total de sus compras
SELECT c.id_cliente, c.nombre, 
       COUNT(p.id_pedido) AS numero_pedidos,
       COALESCE(SUM(p.total), 0) AS total_compras
FROM clientes c
LEFT JOIN pedidos p
ON c.id_cliente = p.id_cliente
GROUP BY c.id_cliente, c.nombre;
  • Validación de integridad de datos: Para verificar que todos los registros que deberían tener relaciones las tienen correctamente.

LEFT JOIN con múltiples tablas

También podemos encadenar varios LEFT JOIN para combinar datos de múltiples tablas:

-- Suponiendo que tenemos una tabla adicional de detalles_pedido
SELECT c.nombre, p.id_pedido, p.fecha_pedido, dp.producto, dp.cantidad
FROM clientes c
LEFT JOIN pedidos p ON c.id_cliente = p.id_cliente
LEFT JOIN detalles_pedido dp ON p.id_pedido = dp.id_pedido;

Filtrado con LEFT JOIN

Es importante entender la diferencia entre filtrar en la cláusula ON y en la cláusula WHERE:

-- Filtro en ON: mantiene todos los clientes, pero solo muestra pedidos después de 2023-02-01
SELECT c.nombre, p.id_pedido, p.fecha_pedido
FROM clientes c
LEFT JOIN pedidos p ON c.id_cliente = p.id_cliente AND p.fecha_pedido > '2023-02-01';

-- Filtro en WHERE: solo muestra clientes con pedidos después de 2023-02-01
SELECT c.nombre, p.id_pedido, p.fecha_pedido
FROM clientes c
LEFT JOIN pedidos p ON c.id_cliente = p.id_cliente
WHERE p.fecha_pedido > '2023-02-01';

En el primer caso, todos los clientes aparecerán en el resultado (posiblemente con NULL en los campos de pedidos si no cumplen la condición). En el segundo caso, solo aparecerán los clientes que tienen pedidos después de la fecha especificada.

Consideraciones de rendimiento

Al utilizar LEFT JOIN, ten en cuenta estas recomendaciones:

  • Índices adecuados: Asegúrate de que las columnas utilizadas en la condición de JOIN estén indexadas para mejorar el rendimiento.

  • Selectividad: Intenta aplicar filtros que reduzcan el conjunto de datos antes de realizar el JOIN.

  • Orden de las tablas: En consultas complejas con múltiples JOIN, el orden puede afectar al rendimiento. Generalmente, es mejor comenzar con la tabla que tenga el filtro más restrictivo.

-- Mejor rendimiento si hay más pedidos que clientes
SELECT c.nombre, p.fecha_pedido
FROM pedidos p
LEFT JOIN clientes c ON p.id_cliente = c.id_cliente
WHERE p.total > 100;

El LEFT JOIN es una herramienta poderosa que te permite mantener todos los registros de la tabla izquierda mientras recuperas información relacionada de otras tablas, lo que resulta esencial para generar informes completos y analizar relaciones entre datos.

RIGHT JOIN

El RIGHT JOIN es una operación de combinación en SQL que funciona de manera complementaria al LEFT JOIN. Esta cláusula permite conservar todos los registros de la tabla derecha (la segunda tabla mencionada en la consulta), independientemente de si tienen correspondencia en la tabla izquierda.

Sintaxis básica

La estructura fundamental de un RIGHT JOIN es la siguiente:

SELECT columnas
FROM tabla_izquierda
RIGHT JOIN tabla_derecha
ON tabla_izquierda.columna = tabla_derecha.columna;

En esta estructura, todos los registros de la tabla_derecha aparecerán en el resultado, mientras que los registros de la tabla_izquierda solo se incluirán si cumplen la condición de combinación.

Comportamiento del RIGHT JOIN

Para ilustrar cómo funciona el RIGHT JOIN, continuemos con el ejemplo de las tablas clientes y pedidos, pero añadamos un escenario diferente. Imaginemos que tenemos pedidos que podrían no estar asociados a clientes registrados (por ejemplo, pedidos anónimos o pendientes de asignación):

-- Estructura modificada de la tabla pedidos (sin restricción de clave foránea)
CREATE TABLE pedidos (
    id_pedido INT PRIMARY KEY,
    id_cliente INT NULL,  -- Puede ser NULL para pedidos sin cliente asignado
    fecha_pedido DATE,
    total DECIMAL(10,2)
);

-- Insertar datos de ejemplo
INSERT INTO clientes VALUES (1, 'Ana García', 'ana@ejemplo.com');
INSERT INTO clientes VALUES (2, 'Carlos López', 'carlos@ejemplo.com');

-- Insertar pedidos (incluyendo algunos sin cliente asignado)
INSERT INTO pedidos VALUES (101, 1, '2023-01-15', 150.50);
INSERT INTO pedidos VALUES (102, 2, '2023-02-20', 75.25);
INSERT INTO pedidos VALUES (103, NULL, '2023-03-05', 45.00);  -- Pedido sin cliente
INSERT INTO pedidos VALUES (104, 5, '2023-03-10', 200.00);    -- Cliente no existe en tabla clientes

Si ejecutamos un RIGHT JOIN para obtener todos los pedidos y la información de los clientes asociados:

SELECT p.id_pedido, p.fecha_pedido, p.total, c.id_cliente, c.nombre
FROM clientes c
RIGHT JOIN pedidos p
ON c.id_cliente = p.id_cliente;

El resultado sería:

id_pedido fecha_pedido total id_cliente nombre
101 2023-01-15 150.50 1 Ana García
102 2023-02-20 75.25 2 Carlos López
103 2023-03-05 45.00 NULL NULL
104 2023-03-10 200.00 NULL NULL

Observa que todos los pedidos aparecen en el resultado, incluso aquellos que no tienen un cliente asociado o cuyo id_cliente no existe en la tabla de clientes. Para estos casos, los campos de la tabla clientes aparecen como NULL.

Casos de uso prácticos

El RIGHT JOIN resulta particularmente útil en varios escenarios:

  • Identificar registros huérfanos: Permite encontrar registros en la tabla derecha que no tienen correspondencia en la tabla izquierda.
-- Pedidos sin cliente válido asignado
SELECT p.id_pedido, p.fecha_pedido, p.total
FROM clientes c
RIGHT JOIN pedidos p
ON c.id_cliente = p.id_cliente
WHERE c.id_cliente IS NULL;
  • Auditoría de datos: Para verificar la integridad referencial cuando no se han definido restricciones de clave foránea.
-- Verificar pedidos con referencias a clientes inexistentes
SELECT p.id_pedido, p.id_cliente AS cliente_referenciado
FROM clientes c
RIGHT JOIN pedidos p
ON c.id_cliente = p.id_cliente
WHERE c.id_cliente IS NULL AND p.id_cliente IS NOT NULL;
  • Informes centrados en transacciones: Cuando el foco principal son las operaciones o transacciones, no las entidades relacionadas.
-- Informe de todos los pedidos con información de cliente cuando está disponible
SELECT p.id_pedido, p.fecha_pedido, p.total,
       COALESCE(c.nombre, 'Cliente no registrado') AS cliente
FROM clientes c
RIGHT JOIN pedidos p
ON c.id_cliente = p.id_cliente;

RIGHT JOIN con múltiples tablas

También podemos encadenar varios RIGHT JOIN para trabajar con múltiples tablas:

-- Suponiendo que tenemos una tabla de envíos
SELECT p.id_pedido, p.fecha_pedido, e.fecha_envio, e.estado,
       COALESCE(c.nombre, 'Cliente no registrado') AS cliente
FROM clientes c
RIGHT JOIN pedidos p ON c.id_cliente = p.id_cliente
RIGHT JOIN envios e ON p.id_pedido = e.id_pedido;

Esta consulta mostraría todos los envíos, incluso aquellos cuyos pedidos o clientes asociados no existan en las tablas correspondientes.

Filtrado con RIGHT JOIN

Al igual que con LEFT JOIN, es importante entender la diferencia entre filtrar en la cláusula ON y en la cláusula WHERE:

-- Filtro en ON: mantiene todos los pedidos, pero solo relaciona con clientes específicos
SELECT p.id_pedido, c.nombre
FROM clientes c
RIGHT JOIN pedidos p ON c.id_cliente = p.id_cliente AND c.nombre LIKE 'A%';

-- Filtro en WHERE: solo muestra pedidos relacionados con clientes cuyo nombre empieza por 'A'
SELECT p.id_pedido, c.nombre
FROM clientes c
RIGHT JOIN pedidos p ON c.id_cliente = p.id_cliente
WHERE c.nombre LIKE 'A%';

Equivalencia con LEFT JOIN

Es importante mencionar que cualquier consulta con RIGHT JOIN puede reescribirse como un LEFT JOIN invirtiendo el orden de las tablas:

-- Estas dos consultas son equivalentes
SELECT p.id_pedido, c.nombre
FROM clientes c
RIGHT JOIN pedidos p ON c.id_cliente = p.id_cliente;

SELECT p.id_pedido, c.nombre
FROM pedidos p
LEFT JOIN clientes c ON p.id_cliente = c.id_cliente;

Por esta razón, muchos desarrolladores prefieren estandarizar sus consultas utilizando siempre LEFT JOIN, lo que puede hacer el código más consistente y fácil de mantener.

Consideraciones de rendimiento

Al utilizar RIGHT JOIN, ten en cuenta estas recomendaciones:

  • Índices apropiados: Asegúrate de que las columnas utilizadas en la condición de JOIN estén indexadas.

  • Evalúa la necesidad real: Considera si realmente necesitas un RIGHT JOIN o si un LEFT JOIN con las tablas invertidas sería más claro.

  • Consistencia en el código: Si tu equipo utiliza predominantemente LEFT JOIN, considera mantener esa convención para facilitar el mantenimiento.

-- Optimización con índices
CREATE INDEX idx_pedidos_cliente ON pedidos(id_cliente);
CREATE INDEX idx_clientes_id ON clientes(id_cliente);

El RIGHT JOIN es una herramienta valiosa en SQL que te permite obtener todos los registros de la tabla derecha mientras recuperas información relacionada de la tabla izquierda, resultando especialmente útil para análisis centrados en transacciones y auditorías de integridad de datos.

Diferencias con INNER JOIN

Cuando trabajamos con bases de datos relacionales, entender las diferencias entre los distintos tipos de JOIN es fundamental para obtener exactamente los datos que necesitamos. El INNER JOIN y los JOIN externos (LEFT JOIN y RIGHT JOIN) tienen comportamientos distintos que afectan directamente a los resultados de nuestras consultas.

Comportamiento fundamental

La diferencia principal entre estos tipos de JOIN radica en cómo manejan los registros sin correspondencia:

  • INNER JOIN: Solo devuelve las filas donde existe coincidencia en ambas tablas.
  • LEFT JOIN: Devuelve todas las filas de la tabla izquierda y las coincidencias de la tabla derecha.
  • RIGHT JOIN: Devuelve todas las filas de la tabla derecha y las coincidencias de la tabla izquierda.

Para visualizar estas diferencias, consideremos un ejemplo con dos tablas: departamentos y empleados.

-- Creación de tablas de ejemplo
CREATE TABLE departamentos (
    id_departamento INT PRIMARY KEY,
    nombre VARCHAR(50)
);

CREATE TABLE empleados (
    id_empleado INT PRIMARY KEY,
    nombre VARCHAR(100),
    id_departamento INT
);

-- Inserción de datos
INSERT INTO departamentos VALUES (1, 'Ventas'), (2, 'Marketing'), (3, 'Recursos Humanos'), (4, 'Investigación');
INSERT INTO empleados VALUES (101, 'Juan Pérez', 1), (102, 'Ana Gómez', 1), (103, 'Carlos Ruiz', 2), (104, 'Laura Sánchez', NULL);

Ahora, veamos cómo se comporta cada tipo de JOIN con estos datos:

-- INNER JOIN: solo muestra empleados con departamento asignado y departamentos con empleados
SELECT e.nombre AS empleado, d.nombre AS departamento
FROM empleados e
INNER JOIN departamentos d ON e.id_departamento = d.id_departamento;

-- LEFT JOIN: muestra todos los empleados, tengan o no departamento asignado
SELECT e.nombre AS empleado, d.nombre AS departamento
FROM empleados e
LEFT JOIN departamentos d ON e.id_departamento = d.id_departamento;

-- RIGHT JOIN: muestra todos los departamentos, tengan o no empleados asignados
SELECT e.nombre AS empleado, d.nombre AS departamento
FROM empleados e
RIGHT JOIN departamentos d ON e.id_departamento = d.id_departamento;

Los resultados serían:

INNER JOIN:

empleado departamento
Juan Pérez Ventas
Ana Gómez Ventas
Carlos Ruiz Marketing

LEFT JOIN:

empleado departamento
Juan Pérez Ventas
Ana Gómez Ventas
Carlos Ruiz Marketing
Laura Sánchez NULL

RIGHT JOIN:

empleado departamento
Juan Pérez Ventas
Ana Gómez Ventas
Carlos Ruiz Marketing
NULL Recursos Humanos
NULL Investigación

Impacto en el conjunto de resultados

Estas diferencias tienen implicaciones importantes:

  • Cardinalidad del resultado: El INNER JOIN generalmente produce conjuntos de resultados más pequeños que los JOIN externos, ya que excluye todos los registros sin correspondencia.

  • Valores NULL: En los JOIN externos, los campos de la tabla sin correspondencia se rellenan con NULL, lo que requiere un manejo adecuado en las aplicaciones.

-- Comparación de conteo de registros
SELECT 'INNER JOIN' AS tipo, COUNT(*) AS total_filas
FROM empleados e
INNER JOIN departamentos d ON e.id_departamento = d.id_departamento
UNION ALL
SELECT 'LEFT JOIN' AS tipo, COUNT(*) AS total_filas
FROM empleados e
LEFT JOIN departamentos d ON e.id_departamento = d.id_departamento
UNION ALL
SELECT 'RIGHT JOIN' AS tipo, COUNT(*) AS total_filas
FROM empleados e
RIGHT JOIN departamentos d ON e.id_departamento = d.id_departamento;

Cuándo usar cada tipo de JOIN

La elección entre INNER JOIN y JOIN externos depende de los requisitos específicos:

  • Usa INNER JOIN cuando:
  • Solo necesitas registros que tengan correspondencia en ambas tablas.
  • Quieres excluir automáticamente datos incompletos o sin relación.
  • Estás realizando operaciones que no pueden manejar valores NULL.
-- Ejemplo: Obtener solo empleados activos con sus departamentos
SELECT e.nombre, d.nombre AS departamento
FROM empleados e
INNER JOIN departamentos d ON e.id_departamento = d.id_departamento
WHERE e.estado = 'Activo';
  • Usa LEFT JOIN cuando:
  • Necesitas todos los registros de la tabla principal (izquierda), independientemente de si tienen relación.
  • Quieres identificar registros en la tabla izquierda que no tienen correspondencia en la derecha.
  • El análisis se centra en la entidad representada por la tabla izquierda.
-- Ejemplo: Informe de todos los empleados, mostrando su departamento si existe
SELECT e.nombre, COALESCE(d.nombre, 'Sin asignar') AS departamento
FROM empleados e
LEFT JOIN departamentos d ON e.id_departamento = d.id_departamento;
  • Usa RIGHT JOIN cuando:
  • Necesitas todos los registros de la tabla secundaria (derecha), independientemente de si tienen relación.
  • Quieres identificar registros en la tabla derecha sin correspondencia en la izquierda.
  • El análisis se centra en la entidad representada por la tabla derecha.
-- Ejemplo: Informe de todos los departamentos, mostrando cuántos empleados tienen
SELECT d.nombre AS departamento, COUNT(e.id_empleado) AS num_empleados
FROM empleados e
RIGHT JOIN departamentos d ON e.id_departamento = d.id_departamento
GROUP BY d.nombre;

Diferencias en el filtrado

El comportamiento de las condiciones de filtrado varía significativamente entre INNER JOIN y JOIN externos:

  • En INNER JOIN: Las condiciones en WHERE y ON tienen el mismo efecto, ya que solo se incluyen las coincidencias.

  • En LEFT/RIGHT JOIN: La ubicación de las condiciones es crucial:

  • Condiciones en ON: Filtran las coincidencias pero mantienen todos los registros de la tabla principal.

  • Condiciones en WHERE: Filtran el resultado final, pudiendo eliminar registros sin correspondencia.

-- Con INNER JOIN, estos dos enfoques son equivalentes
SELECT e.nombre, d.nombre AS departamento
FROM empleados e
INNER JOIN departamentos d ON e.id_departamento = d.id_departamento AND d.nombre = 'Ventas';

SELECT e.nombre, d.nombre AS departamento
FROM empleados e
INNER JOIN departamentos d ON e.id_departamento = d.id_departamento
WHERE d.nombre = 'Ventas';

-- Con LEFT JOIN, estos enfoques dan resultados diferentes
-- Mantiene todos los empleados, pero solo muestra el departamento si es 'Ventas'
SELECT e.nombre, d.nombre AS departamento
FROM empleados e
LEFT JOIN departamentos d ON e.id_departamento = d.id_departamento AND d.nombre = 'Ventas';

-- Solo muestra empleados que pertenecen al departamento 'Ventas'
SELECT e.nombre, d.nombre AS departamento
FROM empleados e
LEFT JOIN departamentos d ON e.id_departamento = d.id_departamento
WHERE d.nombre = 'Ventas';

Rendimiento comparativo

En términos de rendimiento, existen algunas consideraciones importantes:

  • INNER JOIN suele ser más eficiente porque procesa menos filas y no necesita rellenar con NULL.

  • JOIN externos pueden requerir más recursos, especialmente con grandes conjuntos de datos.

  • La optimización de consultas puede variar entre motores de bases de datos:

  • MySQL tiende a optimizar mejor los INNER JOIN.

  • PostgreSQL maneja eficientemente tanto INNER como LEFT/RIGHT JOIN.

-- Añadir índices mejora el rendimiento de todos los tipos de JOIN
CREATE INDEX idx_empleados_depto ON empleados(id_departamento);
CREATE INDEX idx_departamentos_id ON departamentos(id_departamento);

Conversión entre tipos de JOIN

Es posible transformar consultas entre diferentes tipos de JOIN:

  • Un INNER JOIN puede convertirse en LEFT/RIGHT JOIN añadiendo una condición WHERE para filtrar los NULL.
-- Estas consultas son equivalentes
SELECT e.nombre, d.nombre AS departamento
FROM empleados e
INNER JOIN departamentos d ON e.id_departamento = d.id_departamento;

SELECT e.nombre, d.nombre AS departamento
FROM empleados e
LEFT JOIN departamentos d ON e.id_departamento = d.id_departamento
WHERE d.id_departamento IS NOT NULL;
  • Un LEFT JOIN puede simular un INNER JOIN si se filtran los NULL en el WHERE.

  • Un RIGHT JOIN puede reescribirse como LEFT JOIN invirtiendo el orden de las tablas.

La elección entre INNER JOIN y JOIN externos (LEFT/RIGHT) depende fundamentalmente de si necesitas incluir registros sin correspondencia en tus resultados. Mientras que INNER JOIN es más restrictivo y produce conjuntos de datos más "limpios", los JOIN externos ofrecen una visión más completa que puede ser crucial para análisis, auditorías y reportes exhaustivos.

Aprende SQL online

Otros ejercicios de programación de SQL

Evalúa tus conocimientos de esta lección LEFT JOIN y RIGHT 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 sintaxis y funcionamiento del LEFT JOIN para conservar todos los registros de la tabla izquierda.
  • Entender el uso y comportamiento del RIGHT JOIN para conservar todos los registros de la tabla derecha.
  • Diferenciar claramente entre INNER JOIN, LEFT JOIN y RIGHT JOIN y sus implicaciones en los resultados.
  • Aplicar filtros correctamente en consultas con JOIN para obtener resultados precisos.
  • Reconocer buenas prácticas y consideraciones de rendimiento al usar JOINs en bases de datos SQL.