En el corazón del lenguaje de consulta estructurado (SQL) se encuentra una variedad de operadores que mejoran nuestra capacidad para manipular datos. Uno de estos operadores, esencial para el desarrollo de consultas SQL complejas, es el operador NOT IN
. Para aquellos interesados en maximizar su eficacia en SQL, entender la función y la aplicación del operador es indispensable.
¿Qué es el Operador NOT IN?
En SQL se utiliza para filtrar los resultados de una consulta. Este compara un valor con un conjunto de valores y devuelve filas donde el valor no se encuentra en ese conjunto.
SELECT column_name FROM table_name WHERE column_name NOT IN (value1, value2, ...);
Por ejemplo, si queremos seleccionar todos los empleados que no están en los departamentos de ‘Ventas’ o ‘Marketing’, la consulta SQL sería:
SELECT employee_name FROM employees WHERE department NOT IN ('Ventas', 'Marketing');
Uso del operador con Subconsultas
Una de las formas más poderosas de utilizar el operador es en conjunto con subconsultas. Una subconsulta es una consulta que se encuentra dentro de otra consulta.
Veamos un ejemplo:
SELECT employee_name FROM employees WHERE employee_id NOT IN (SELECT manager_id FROM departments);
En este caso, la subconsulta (SELECT manager_id FROM departments)
devuelve una lista de todos los ID de los gerentes. Luego, la consulta principal selecciona los nombres de los empleados cuyo ID no está en esa lista, es decir, los empleados que no son gerentes.
JOIN
Por otro lado, la utilización de JOIN
generalmente conduce a un mejor rendimiento, especialmente con conjuntos de datos grandes. Esto se debe a que SQL solo tiene que ejecutar la consulta JOIN
una vez y luego puede usar los resultados para realizar la comparación.
SELECT a.* FROM tabla1 a LEFT JOIN tabla2 b ON a.id = b.id WHERE b.id IS NULL;
Rendimiento del Operador NOT IN
Es importante entender que el operador NOT IN
puede ser ineficiente en algunas bases de datos, especialmente cuando la subconsulta devuelve muchos valores. En estos casos, podría ser preferible utilizar el operador NOT EXISTS
o un LEFT JOIN
en su lugar.

Ejemplos Prácticos del Uso
El operador NOT IN
es útil en muchas situaciones. A continuación, describiremos algunos escenarios comunes.
Exclusión de Categorías Específicas
Supongamos que queremos obtener una lista de productos que no pertenecen a ciertas categorías. En este caso, podemos usar el operador NOT IN
para excluir estas categorías.
SELECT product_name FROM products WHERE category NOT IN ('Electrónicos', 'Ropa');
Filtrado de Registros Únicos
Otro uso práctico es el filtrado de registros únicos. Si queremos seleccionar solo los registros que no tienen duplicados en una determinada columna, podemos usar NOT IN
.
SELECT first_name FROM customers WHERE customer_id NOT IN (SELECT customer_id FROM orders);
Esta consulta seleccionará los nombres de los clientes que no han realizado ningún pedido.
Eliminando Registros duplicados
para esto te recomendamos ver nuestro articulo que explica ampliamente como utilizar este comando para para resolver este error de registros duplicados en sql.
DELETE FROM productos WHERE codigo NOT IN (SELECT productid FROM orders);
Comparar cadenas de texto
El operador NOT IN tiene la capacidade de comparar cadenas de texto del tipo (char, nchar, varchar, nvarchar). El codigo sql a continuación muestra como comparar dos cadenas de texto utilizando sql IF que se utiliza para evaluar condiciones.
--esto seria utilizando el operador <> IF @databasename<> 'prueba' AND @databasename <>'databasetest' BEGIN END --utlizando not in IF @UserName NOT IN ('TrainingUser', 'TestUser') BEGIN END
aunque el resultado es el mismo para el caso de not in la comparacion fue mas rapida ya que el motor no debia evaluar un segundo operador logico.
Filtrar fechas
El operador NOT IN se puede utilizar para buscar cualquier valor de fecha o de fecha y hora, excepto aquellos que coincidan con uno de una lista de valores de fecha o de fecha y hora. Es posible que necesitemos sacar las horas trabajadas de un conjunto pero antes necesitamos sacar los dias festivos. Esto difiere del uso de between para sacar fechas en un rango.
SELECT empeladoid, fecharegistro , horaslaboradas FROM rrhh.horas WHERE fecharegistro NOT IN ('25-Dec-2023', '1-ene-2023', '4-jul-2023')
para este caso se excluyeron ciertos dias festivos de la hora de calculo. para sacar fecha tambien te recomiendo este link
Descargar ejemplos practicos de sql
Script de sql para usar dentro de la instancia del servidor de gestion de base de datos de tu prferencia con datos de prueba para trabajar con sql server, mysql o postgresql.
Conclusión
El operador NOT IN
en SQL es una herramienta esencial para los desarrolladores. Sin embargo, el uso de JOIN
puede ser más apropiado en ciertas circunstancias debido a su eficiencia y legibilidad superiores. Siempre debemos considerar el contexto y los requisitos de la tarea para decidir cuál método es el más adecuado.
Esperamos que este artículo te haya sido de ayuda. Si tienes alguna duda o comentario, no dudes en ponerte en contacto con nosotros. ¡Hasta la próxima!
Otros articulos recomendados
- Guia de operadores logicos basicos en SQL
- Comando Where en sql guia sencilla
- Ejemplos de comandos DML y DDL
- If de sql ejemplos practicos
- Join de sql como funcionan
- Como eliminar registros duplicados
- Que son la llaves primarias y foraneas?
- Base de datos de ejemplos Northwind para descargar.
- Como sacar fechas y horas en sql
- Between de sql guia completa
- Having count como funciona
- Subtring de sql ejemplos practicos
- Como manipular cadenas de caracteres en sql
- subconsultas de sql que son?
Enlaces que debes ver:
Gracias, Bye :D!!