curso
Operador SQL NOT IN: Guía completa para principiantes
En el ámbito del análisis y la gestión de datos, SQL (Lenguaje de Consulta Estructurado) se erige como una herramienta fundamental para acceder a los sistemas de bases de datos y manipularlos. Entre sus muchas funciones, el operador NOT IN
sirve como un potente medio para filtrar conjuntos de datos, permitiendo a los usuarios excluir filas que coincidan con una lista especificada de valores. Este tutorial se ha diseñado con el objetivo de desmitificar el operador NOT IN
para principiantes y profesionales de los datos, garantizando la claridad en su aplicación y la comprensión de sus posibles escollos.
¿Por qué NO ENTRAR?
La elección de centrarnos en el operador NOT IN
se debe a su utilidad en escenarios de exclusión de datos. Tanto si limpias datos como si preparas informes o realizas análisis complejos, comprender cómo excluir eficazmente puntos de datos concretos tiene un valor incalculable. Este operador ofrece una sintaxis sencilla, pero tiene matices que pueden afectar al rendimiento y la precisión.
Nuestra decisión de explorar NOT IN
en profundidad es proporcionar una comprensión global que te dote de los conocimientos necesarios para utilizarlo eficazmente en tus consultas SQL.
Comprender SQL NOT IN
Lo básico de NO EN
El operador NOT IN
se utiliza dentro de una cláusula WHERE
para excluir filas en las que el valor de una columna especificada coincida con cualquiera de una lista de valores dada. Su sintaxis básica es la siguiente
SELECT column_names
FROM table_name
WHERE column_name NOT IN (value1, value2, ...);
Esta sintaxis destaca el papel del operador en el filtrado de datos, un paso fundamental en el análisis de datos y la gestión de bases de datos.
Aplicaciones prácticas de NOT IN
Considera una base de datos que contiene una tabla con información sobre los clientes. Si quieres seleccionar clientes que no sean de ciudades concretas, NOT IN
se convierte en una herramienta inestimable, que te permite excluir fácilmente esas ciudades de tu conjunto de resultados.
Ejemplos NOT IN paso a paso
Ejemplo 1: Excluir valores específicos
Supongamos que tenemos una tabla llamada Customers
con las columnas CustomerID
, CustomerName
, y City
. Para encontrar clientes que no se encuentren en "Nueva York" o "Los Ángeles", la consulta sería
ClientelD |
CustomerName |
Ciudad |
1 |
John Doe |
Nueva York |
2 |
Jane Smith |
Los Angeles |
3 |
Emily Jones |
Chicago |
4 |
Chris Brown |
Miami |
5 |
Alex Johnson |
San Francisco |
6 |
Jessica White |
Nueva York |
Tabla de clientes
SELECT CustomerName, City
FROM Customers
WHERE City NOT IN ('New York', 'Los Angeles');
CustomerName |
Ciudad |
Emily Jones |
Chicago |
Chris Brown |
Miami |
Alex Johnson |
San Francisco |
Ejemplo 2: Utilizar NOT IN con subconsultas
NOT IN
también puede funcionar con subconsultas. Por ejemplo, para encontrar productos que no se han pedido:
ProductID |
ProductName |
1 |
Manzana |
2 |
Banana |
3 |
Naranja |
4 |
Pera |
5 |
Uva |
Productos de mesa
OrderID |
ProductID |
101 |
2 |
102 |
4 |
103 |
2 |
104 |
3 |
Tabla de pedidos
SELECT ProductName
FROM Products
WHERE ProductID NOT IN (
SELECT ProductID
FROM Orders
);
ProductName |
Manzana |
Uva |
Errores comunes y cómo evitarlos
Manejo de valores nulos
Un problema común con NOT IN
surge cuando la lista de valores contiene NULL
. Como NULL
representa un valor desconocido, cualquier comparación con NULL
utilizando NOT IN
no devolverá ninguna fila, aunque haya filas que lógicamente deberían excluirse de la lista.
Para evitarlo, asegúrate de que la lista de valores no contiene NULL
o utiliza un método alternativo como NOT EXISTS
.
Ejemplo:
Supongamos que tenemos una tabla Pedidos con una columna CustomerID
, algunas de las cuales son NULL
para representar pedidos de invitados. Si ejecutas una consulta para encontrar pedidos no realizados por determinados clientes, incluir NULL
en la lista haría que no se obtuvieran resultados.
OrderID |
CustomerID |
101 |
3 |
102 |
4 |
103 |
2 |
104 |
|
106 |
1 |
Tabla de pedidos
-- Assume we want to exclude CustomerID 1, 2, and unknown (NULL) customers
SELECT OrderID
FROM Orders
WHERE CustomerID NOT IN (1, 2, NULL);
Esta consulta no devolvería ninguna fila, lo que probablemente no sea el resultado deseado.
Solución: Para garantizar resultados precisos, evita incluir NULL en la lista de NOT IN
. Alternativamente, utiliza una combinación de NOT IN
para valores conocidos y IS NOT NULL
para manejar los NULL de forma eficaz.
SELECT OrderID
FROM Orders
WHERE CustomerID NOT IN (1, 2) AND CustomerID IS NOT NULL;
OrderID |
101 |
102 |
Consideraciones sobre el rendimiento
Para grandes conjuntos de datos o subconsultas, NOT IN
puede ser menos eficiente que alternativas como NOT EXISTS
o LEFT JOIN
/IS NULL
. La ineficacia se debe a cómo NOT IN
compara cada fila de la tabla con cada valor de la lista, lo que puede provocar un rendimiento lento en grandes conjuntos de datos.
Alternativas a SQL NOT IN
Utilizar NOT EXISTS
NOT EXISTS
suele recomendarse en lugar de NOT IN
cuando se trata de subconsultas que pueden devolver valores de NULL
. En general, es más eficaz porque se detiene en cuanto encuentra una coincidencia.
Ejemplo:
Para encontrar productos que no se han pedido, utiliza NOT EXISTS:
SELECT ProductName
FROM Products p
WHERE NOT EXISTS (
SELECT 1
FROM Orders o
WHERE o.ProductID = p.ProductID
);
ProductName |
Manzana |
Uva |
Esta consulta comprueba la no existencia de un producto en la tabla de pedidos, lo que puede ser más eficaz que comparar contra una lista potencialmente grande de IDs con NOT IN
.
UNIÓN IZQUIERDA / ES NULO
Otra alternativa eficaz para excluir filas es utilizar una cláusula LEFT JOIN
combinada con una cláusula WHERE
... IS NULL
. Este método es especialmente eficaz para grandes conjuntos de datos.
Ejemplo:
Para conseguir el mismo objetivo de encontrar productos que no se han pedido:
SELECT p.ProductName
FROM Products p
LEFT JOIN Orders o ON p.ProductID = o.ProductID
WHERE o.ProductID IS NULL;
ProductName |
Manzana |
Uva |
Este método aprovecha el LEFT JOIN
para incluir todos los productos y cualquier pedido que coincida, y luego filtra los productos que tienen pedidos utilizando WHERE o.ProductID IS NULL
, excluyéndolos de hecho.
Buenas prácticas para utilizar NOT IN
- Comprueba la lista de valores
NULL
: Asegúrate de que la lista utilizada enNOT IN
no contiene valores NULL para evitar resultados inesperados. - Considera el tamaño del conjunto de datos: Para grandes conjuntos de datos o subconsultas, evalúa si alternativas como
NOT EXISTS
pueden ofrecer un mejor rendimiento. - Indexación: Asegúrate de que las columnas utilizadas en la cláusula
NOT IN
están indexadas, si es posible, para mejorar el rendimiento de la consulta.
Utilizar NOT IN en un proyecto de datos de la vida real
En el análisis de datos, el comando SQL "Not IN" se utiliza habitualmente para recuperar datos concretos. En esta sección, trabajaremos con una base de datos de una librería que lleva un registro de su inventario (libros disponibles en la tienda) y de sus ventas (libros vendidos). Nuestro objetivo es identificar qué libros no se han vendido nunca.
Tenemos dos mesas:
- Inventario: para almacenar información sobre los libros de la librería.
- Ventas: para almacenar los registros de los libros que se han vendido.
Tabla de inventario
Tabla de ventas
Ahora queremos averiguar qué libros no se han vendido nunca.
SELECT Title, Author
FROM Inventory
WHERE BookID NOT IN (
SELECT BookID
FROM Sales
);
A continuación, queremos identificar los libros de nuestro inventario que no se han vendido en el último mes, suponiendo que hoy es 7 de febrero de 2024. Esto implica comprobar la FechaVenta de la tabla Ventas con nuestra fecha actual.
SELECT Title, Author
FROM Inventory
WHERE BookID NOT IN (
SELECT BookID
FROM Sales
WHERE SaleDate >= date('now', '-1 month')
);
Conclusión
El operador NOT IN
es una herramienta versátil en SQL para excluir valores específicos de los resultados de tu consulta. Si conoces su sintaxis, sus aplicaciones prácticas y sus posibles escollos, podrás utilizar eficazmente este operador en tus tareas de manipulación de datos.
Recuerda tener en cuenta los valores de NULL
y el tamaño del conjunto de datos para optimizar el rendimiento y la precisión de tus consultas. A medida que te familiarices con NOT IN
, descubrirás que es un complemento inestimable de tu conjunto de herramientas SQL, que te permitirá un análisis y una gestión de datos más precisos y eficaces.
Puedes obtener más información sobre NOT IN
y NOT EXISTS
en nuestro curso Mejorar el rendimiento de las consultas en SQL Server y explorar los operadores SQL y mucho más en nuestro curso Básicos de SQL y Fundamentos de SQL.
Conviértete en Ingeniero de Datos

Soy un científico de datos certificado que disfruta creando aplicaciones de aprendizaje automático y escribiendo blogs sobre ciencia de datos. Actualmente me centro en la creación de contenidos, la edición y el trabajo con grandes modelos lingüísticos.
Comienza hoy tu viaje de aprendizaje de SQL
curso
Manipulación de datos en SQL
curso