Saltar al contenido principal

SQL UPDATE con JOIN: Cómo funciona

Aprende cómo UPDATE con JOIN en SQL simplifica las actualizaciones entre tablas en SQL Server. Comprende en qué se diferencian INNER JOIN y LEFT JOIN para casos de uso específicos, y explora alternativas utilizando subconsultas o la sentencia MERGE.
Actualizado 1 oct 2024  · 9 min de lectura

Los datos coherentes son importantes para la fiabilidad y la integridad en las bases de datos relacionales. Al modificar datos existentes en tablas relacionadas, utilizamos la sentencia UPDATE con la cláusula JOIN para lograr la coherencia de los datos. La operación UPDATE con JOIN está soportada en SQL Server y es útil para garantizar una sincronización precisa de los datos entre tablas.

La operación SQL JOIN permite actualizaciones más complejas que las de una sola tabla mediante claves externas compartidas entre las distintas tablas. La operación UPDATE con JOIN es útil para desarrolladores y administradores de bases de datos, ya que mejora la eficacia y reduce los riesgos de incoherencias en los datos. 

Antes de empezar, te recomiendo que sigas el curso Introducción a SQL Server de DataCamp para familiarizarte con el funcionamiento de las bases de datos SQL Server. Este tutorial está escrito pensando específicamente en SQL Server. Consulta también nuestro tutorial, Introducción a las uniones SQL, para aprender a utilizar JOIN cuando trabajes con varias tablas en SQL.

Cómo utilizar SQL UPDATE con JOIN

En SQL Server, la operación UPDATE con JOIN te permite actualizar registros de una tabla basándote en datos coincidentes de otra. Esta técnica es especialmente útil cuando se sincronizan datos de varias tablas.

Utilizar SQL UPDATE con INNER JOIN

El INNER JOIN en SQL recupera filas/registros con datos coincidentes en ambas tablas. Cuando se utiliza con la sentencia UPDATE, INNER JOIN garantiza que sólo se actualicen los registros de la tabla destino que tengan coincidencias correspondientes en la tabla unida.

La estructura típica de UPDATE con INNER JOIN consiste en especificar la tabla de destino que hay que actualizar y definir las columnas que hay que actualizar. La estructura también incluye el uso de la INNER JOIN para enlazarla con otra tabla basada en una columna común para actualizar sólo los registros necesarios.

Ejemplo de INNER JOIN

Supongamos que gestionas una base de datos de venta al por menor en la que necesitas actualizar una tabla Sales para sincronizarla con los cambios en la tabla Customer. Un cliente ha cambiado recientemente su método de contacto preferido, y querrías que estos cambios se reflejaran en las dos tablas. Utilizarás UPDATE con INNER JOIN para asegurarte de que sólo se modifican los registros de ventas relacionados con los clientes que han actualizado su información de contacto, sin afectar a otras filas de los datos.

-- Update the Sales table based on the new preferred contact methods in the Customers table
UPDATE s
SET s.ContactMethod = c.PreferredContactMethod
FROM Sales s
INNER JOIN Customers c ON s.CustomerID = c.CustomerID
WHERE c.CustomerID IN (3, 7, 9);

UPDATE con INNER JOIN mejores prácticas

Cuando utilices UPDATE con INNER JOIN, ten en cuenta las siguientes prácticas recomendadas para realizar consultas eficientes.

  • Utilizar índices en columnas de unión: Asegúrate de que las columnas utilizadas en la condición JOIN están indexadas para optimizar el rendimiento, acelerando la ejecución de la consulta.

  • Limitar el alcance de la actualización: Utiliza la cláusula WHERE para asegurarte de que sólo se actualizan las filas relevantes y mejorar el rendimiento de la consulta.

Uso de SQL UPDATE con LEFT JOIN

Se utiliza un LEFT JOIN para recuperar todos los registros de la tabla izquierda (primera) y los registros coincidentes de la tabla derecha (segunda). Una consulta con LEFT JOIN devolverá NULL resultados de la tabla correcta si no hay resultados coincidentes. Cuando se utiliza con la sentencia UPDATE, LEFT JOIN puede actualizar registros aunque no haya datos coincidentes en la segunda tabla, lo que resulta útil para rellenar los datos que faltan. Consulta nuestra Hoja de trucos sobre uniones SQL si quieres repasar las uniones SQL.

ejemplo de LEFT JOIN

Imagina que gestionas la base de datos de una tienda online. La tabla Customers contiene una lista de todos los clientes, mientras que la tabla Orders contiene detalles de los pedidos realizados por algunos de estos clientes. Utilizarás la página LEFT JOIN para recuperar y actualizar los datos del pedido de todos los clientes, incluidos los que aún no han realizado ningún pedido. Este método rellenará los datos que faltan de los clientes que no tienen pedidos realizados con un valor NULL o especificado.

Nuestro ejemplo con LEFT JOIN va a ser un poco diferente porque LEFT JOIN devuelve valores de NULL si no se encuentran registros coincidentes en la tabla correcta. Por ello, es importante averiguar cómo tratar estos valores NULLPuedes gestionar los valores de NULL estableciendo un valor por defecto en las columnas que se van a actualizar. Utilizando la función COALESCE(), el LEFT JOIN incluirá una condición para un valor por defecto para los datos que faltan. La siguiente consulta muestra cómo establecer un valor por defecto para los valores de NULL.

-- Update all customers to set default values where OrderStatus and OrderDate are NULL
UPDATE c
SET 
    c.OrderStatus = COALESCE(o.OrderStatus, 'No Orders'),
    c.OrderDate = COALESCE(o.OrderDate, '2023-01-01')   
FROM Customers c
LEFT JOIN Orders o ON c.CustomerID = o.CustomerID;
-- Select from the updated Customers table
SELECT * 
FROM Customers;

También puedes utilizar las funciones COALESCE() o IFNULL() para manejar los valores de NULL que implican cálculos antes de actualizar las columnas. Consulta nuestro tutorial sobre la función SQL COALESCE() para obtener más información.

UPDATE con LEFT JOIN mejores prácticas

Cuando utilices UPDATE con LEFT JOIN, ten en cuenta las siguientes prácticas recomendadas para realizar consultas eficientes.

  • Utiliza referencias explícitas a columnas: En lugar de utilizar SELECT *, especifica explícitamente las columnas que quieres actualizar para que tu consulta sea más clara y evitar actualizaciones involuntarias.

  • Utilizar índices en columnas de unión: Asegúrate de que las columnas utilizadas en la condición JOIN están indexadas para mejorar el rendimiento de la operación JOIN y el tiempo total de ejecución de la consulta.

Consideraciones sobre el rendimiento de la actualización SQL con unión

Untender las implicaciones de rendimiento al utilizar UPDATE con JOIN en SQL es importante para garantizar que tus consultas se ejecutan con eficacia. El rendimiento de estas operaciones puede verse influido por varios factores, como el tamaño de las tablas utilizadas, el tipo de unión utilizado y la existencia de índices adecuados.

Índices y velocidad de consulta

Indexar las columnas implicadas en la condición de unión es importante para acelerar el proceso de actualización. Si indexas las columnas adecuadamente, la operación sólo localizará las filas coincidentes durante la unión, reduciendo el tiempo necesario para la exploración de la tabla.

Impacto de los grandes conjuntos de datos

Cuando se trabaja con grandes conjuntos de datos, las ejecuciones de las consultas pueden ser más lentas debido a las operaciones que consumen muchos recursos. Considera las siguientes buenas prácticas para mitigar los problemas de rendimiento con grandes conjuntos de datos. Prueba también el itinerario de habilidades SQL Server para Administradores de Bases de Datos si vas a diseñar o mantener bases de datos regularmente como parte de tu trabajo. 

  • Actualizaciones de lotes: Divide las actualizaciones en lotes más pequeños para reducir la carga de la base de datos y actualizar los registros con eficacia.

  • Limita el alcance de la actualización: Cuando utilizas la cláusula WHERE, especificas las filas a actualizar, reduciendo el tiempo de procesamiento de las consultas.

Errores comunes y cómo evitarlos

Hay algunos errores comunes que puedes encontrar al utilizar UPDATE con JOIN en SQL Server. Estos errores pueden provocar problemas de rendimiento o la actualización de datos no deseados. A continuación se enumeran algunos de estos errores y cómo evitarlos.

Actualizaciones involuntarias

Si no especificas correctamente la condición de unión, el UPDATE con JOIN actualizará más registros de los previstos. Este error actualizará una tabla entera en lugar del subconjunto necesario. Para evitar este error, asegúrate siempre de utilizar una condición JOIN precisa para actualizar las filas necesarias.

Productos cartesianos

Un producto cartesiano se produce cuando la condición de unión es incorrecta o falta, lo que hace que la consulta haga coincidir cada fila de la tabla izquierda con cada fila de la tabla derecha. Este problema puede ralentizar el funcionamiento de la consulta y producir resultados inexactos. Para evitar este error, asegúrate siempre de tener bien definida la condición JOIN. Asegúrate también de indicar las columnas correctas para aplicar la condición de unión.

Alternativas a SQL UPDATE con JOIN

Aunque UPDATE con JOIN es un potente método para actualizar registros en tablas relacionadas, existen métodos alternativos para conseguir la actualización. A continuación se indican algunas opciones.

Subconsultas

Las subconsultas son una alternativa importante a JOIN cuando quieres realizar actualizaciones basadas en una condición simple. Con las subconsultas, evitarás múltiples tablas complejas especificando la condición en la subconsulta.

El siguiente ejemplo muestra cómo utilizar una subconsulta para actualizar la tabla Sales con la última CustomerStatus de la tabla Customers.

-- Update the CustomerStatus in the Sales table
UPDATE Sales
-- Set the CustomerStatus in Sales to corresponding value from the Customers table
SET CustomerStatus = (
    -- Fetch CustomerStatus from the Customers table for the matching CustomerID
    SELECT CustomerStatus 
    FROM Customers 
    WHERE Customers.CustomerID = Sales.CustomerID
)
-- Update rows in Sales where a matching CustomerID exists in the Customers table
WHERE EXISTS (
    -- Subquery to check if a matching CustomerID exists in the Customers table
    SELECT 1 
    FROM Customers 
    WHERE Customers.CustomerID = Sales.CustomerID
);

Declaración MERGE

La sentencia MERGE es un comando SQL versátil que te permite realizar operaciones UPDATE, INSERT o DELETE en una única consulta basada en la comparación de dos tablas. La sentencia MERGE es útil cuando necesitas sincronizar datos entre dos tablas, manejando filas coincidentes y no coincidentes.

Utilizar la sentencia MERGE es útil porque proporciona un método conciso para realizar varias operaciones en una sola consulta. La sintaxis de la declaración MERGE es la siguiente.

-- Merge data from the source table into the target table
MERGE INTO target_table AS target
USING source_table AS source
    -- Define the common key between the source and target tables
    ON target.common_column = source.common_column
-- When a match is found in both tables based on the common key
WHEN MATCHED THEN
    -- Update the target table's column with the corresponding value from the source table
    UPDATE SET target.column = source.column
-- When a row exists in the source table but not in the target table
WHEN NOT MATCHED THEN
    -- Insert the new data into the target table
    INSERT (column1, column2) 
    VALUES (source.column1, source.column2)
-- When a row exists in the target table but not in the source table
WHEN NOT MATCHED BY SOURCE THEN
    -- Delete the row from the target table
    DELETE;

Conclusión

Comprender cómo utilizar UPDATE con JOIN en SQL Server es importante para actualizar eficazmente los datos de varias tablas en bases de datos relacionales. Esta técnica te permite actualizar los registros de una tabla basándote en los datos coincidentes de otra, garantizando la coherencia y sincronización de los datos entre tablas relacionadas. La aplicación de estas técnicas y buenas prácticas puede mejorar las operaciones de tu base de datos, garantizando una gestión de datos precisa, eficaz y fiable. 

Si quieres avanzar en tus conocimientos de SQL, te recomiendo que consultes el curso de conocimientos Fundamentos de SQL Server de DataCamp para mejorar tus habilidades de análisis de datos. El curso Escribir funciones y procedimientos almacenados en SQL Server también te ayudará a aprender la manipulación eficaz de datos en SQL Server. Si estás preparando tu entrevista SQL, te recomiendo que leas nuestra entrada del blog, 20 preguntas principales de la entrevista SQL Joins para ayudarte a prepararte. Por último, si quieres aplicar tus conocimientos de SQL en una carrera como ingeniero de datos, considera también cursar nuestra carrera de Ingeniero de Datos en Python, que se completa con una certificación al final.

Conviértete en Ingeniero de Datos

Conviértete en un ingeniero de datos mediante el aprendizaje avanzado de Python
Empieza a aprender gratis

Allan Ouko's photo
Author
Allan Ouko
LinkedIn
Creo artículos que simplifican la ciencia de los datos y la analítica, haciéndolos fáciles de entender y accesibles.

Preguntas frecuentes sobre SQL

¿Para qué sirve utilizar UPDATE con JOIN en SQL?

UPDATE con JOIN te permite actualizar registros de una tabla basándote en datos coincidentes de otra tabla.

¿En qué se diferencia una INNER JOIN de una LEFT JOIN cuando se utiliza en una sentencia UPDATE?

Un INNER JOIN actualiza sólo los registros que tienen filas coincidentes en ambas tablas, mientras que un LEFT JOIN actualiza todos los registros de la tabla de destino, incluidos los que no tienen una fila coincidente en la tabla unida, rellenando los datos que faltan o manejando los valores de NULL.

¿Cuáles son los problemas de rendimiento de UPDATE con JOIN en SQL?

Las tablas/conjuntos de datos grandes pueden afectar al rendimiento de las consultas de UPDATE con JOIN, ya que requieren más capacidad de procesamiento.

¿Qué bases de datos admiten UPDATE con JOIN IN SQL?

El concepto UPDATE con JOIN funciona en SQL Server, MySQL y PostgreSQL, aunque la sintaxis difiere según la base de datos. Oracle no admite UPDATE con JOIN directamente y requiere un enfoque diferente utilizando subconsultas o la sentencia MERGE.

¿Cuáles son las alternativas de UPDATE con JOIN en SQL?

Utilizar subconsultas o la sentencia MERGE son alternativas adecuadas de UPDATE con JOIN.

Temas

Aprende SQL con DataCamp

curso

Joining Data in SQL

4 hr
164.6K
Level up your SQL knowledge and learn to join tables together, apply relational set theory, and work with subqueries.
Ver detallesRight Arrow
Comienza el curso
Ver másRight Arrow
Relacionado

blog

20 preguntas principales de la entrevista sobre SQL Joins

Prepara tu entrevista SQL con esta lista de las preguntas más comunes sobre SQL Joins
Javier Canales Luna's photo

Javier Canales Luna

15 min

tutorial

Cómo utilizar un alias SQL para simplificar tus consultas

Explora cómo el uso de un alias SQL simplifica tanto los nombres de las columnas como los de las tablas. Aprende por qué utilizar un alias SQL es clave para mejorar la legibilidad y gestionar uniones complejas.
Allan Ouko's photo

Allan Ouko

9 min

tutorial

Ejemplos y tutoriales de consultas SQL

Si quiere iniciarse en SQL, nosotros le ayudamos. En este tutorial de SQL, le presentaremos las consultas SQL, una potente herramienta que nos permite trabajar con los datos almacenados en una base de datos. Verá cómo escribir consultas SQL, aprenderá sobre
Sejal Jaiswal's photo

Sejal Jaiswal

21 min

tutorial

Seleccionar varias columnas en SQL

Aprende a seleccionar fácilmente varias columnas de una tabla de base de datos en SQL, o a seleccionar todas las columnas de una tabla en una simple consulta.
DataCamp Team's photo

DataCamp Team

3 min

tutorial

Tutorial de comparación de patrones SQL LIKE

Utiliza LIKE para filtrar registros SQL según coincidencias de cadenas específicas. Este tutorial te enseña a utilizar comodines, NOT, LOWER, UPPER y CASE WHEN con LIKE.
Travis Tang 's photo

Travis Tang

8 min

tutorial

Cómo utilizar GROUP BY y HAVING en SQL

Una guía intuitiva para descubrir los dos comandos SQL más populares para agregar filas de tu conjunto de datos
Eugenia Anello's photo

Eugenia Anello

6 min

See MoreSee More