SQL

Cómo obtener las filas de una tabla que no están en otra tabla en SQL Server

Estrada Web Group
Administrador
Cómo obtener las filas de una tabla que no están en otra tabla en SQL Server

Cómo obtener las filas de una tabla que no están en otra tabla en SQL Server

Si estas escribiendo una consulta en SQL y quieres verificar que las filas que te regrese el query no existan en otra tabla, este articulo te servirá.

La base de datos que estoy usando es AdventureWork y es gratuita la puedes descargar aquí, en la consulta quiero encontrar todas las provincias que no tienen direcciones asignadas. Las tablas involucradas son:

  1. En Person.StateProvince, el campo StateProvinceId identifica de manera única a una provincia.
  2. En Person.Address, hay un campo StateProvinceId que enlaza la dirección con la Provincia.

Temas relacionados:

Una forma rápida de hacer la consulta SQL es:

SELECT s.*
  FROM Person.StateProvince s
  WHERE NOT EXISTS (SELECT * FROM Person.Address a 
WHERE s.StateProvinceId = a.StateProvinceId );

Esta consulta funciona bien, puede pensar que SQL Server ejecutará esa consulta SELECT * FROM Person.Address para cada fila de la tabla Person.StateProvince, pero es mucho más inteligente que eso, lo que lo hace más rápido. Escanea primero el índice Person.Address porque es mucho más grande y luego lo une a la tabla Person.StateProvince

Pero hay otra forma de escribir esa misma consulta:

SELECT s.*
  FROM Person.StateProvince s
  LEFT OUTER JOIN Person.Address a ON a.StateProvinceId = s.StateProvinceId
  WHERE a.AddressID IS NULL;

Esta consulta puede ser más difícil de entender la primera vez que la ves. Estoy uniendo a la tabla Person.Address, pero es una combinación opcional, y solo estoy quitando las filas donde la clave principal Person.Address (AddressID) es nulo. Eso significa, solo me regresara las filas de Person.StateProvince sin filas de Person.Address coincidentes.

  1. La tabla Person.StateProvince se procesa primero
  2. Hay un tipo diferente de unirse (todo lo de la izquierda)
  3. Hay un filtro después de la unión

La opción que utilices para realizar la consulta va a ser la manera más intuitiva y legible para ti y tus compañeros de trabajo. Si puedes entender lo que está pasando fácilmente, entonces el motor de SQL también lo hará.

¿Qué opción elegiste? envíame tus comentarios y sugerencias en el apartado de comentarios y en seguida te responderé. Saludos y comparte el articulo en tus redes sociales.

Compartir artículo:

Más artículos geniales

¿Qué es SQL Like y para qué sirve?

¿Qué es SQL Like y para qué sirve?

En este tutorial, aprenderás a usar el operador LIKE de SQL Server para verificar si una cadena de caracteres coincide con un patrón especificado.

Ver artículo completo
Cómo usar los valores NULL y los operadores IS NULL y IS NOT NULL para probar si un valor es NULL

Cómo usar los valores NULL y los operadores IS NULL y IS NOT NULL para probar si un valor es NULL

Resumen: en este tutorial, aprenderás sobre la lógica de los valores NULL en SQL Server. También aprenderás a usar los operadores IS NULL y IS NOT NULL para probar si un valor es NULL o no.

Ver artículo completo

Manténgase actualizado

Obtenga excelente contenido en su bandeja de entrada todas las semanas.
Solo contenido excelente, no compartimos su correo electrónico con terceros.
Subir al inicio de la pantalla ;