Filtros · pertenencia a conjuntos

IN

Comprueba si un valor coincide con alguno de los valores de una lista o del resultado de una subconsulta.

Lectura: 5–7 minEjemplo comprobadoNULL explicado
Contenido de esta guía

Qué comprueba IN

IN expresa una pertenencia: la condición es verdadera cuando el valor de la izquierda coincide con al menos un elemento del conjunto de la derecha.

Con una lista pequeña suele ser más legible que encadenar varias comparaciones con OR. Con una subconsulta permite filtrar según datos almacenados en otra tabla.

Lista y subconsulta

Dos formas
WHERE ciudad IN ('Madrid', 'Sevilla')

WHERE cliente_id IN (
  SELECT id
  FROM clientes
  WHERE activo = 1
)

La subconsulta de IN debe devolver una sola columna cuando se compara un único valor.

Ejemplo guiado: clientes de dos ciudades

SQL
SELECT nombre, ciudad
FROM clientes
WHERE ciudad IN ('Madrid', 'Sevilla')
ORDER BY ciudad, nombre;
Resultado comprobado con la base educativa
nombreciudad
Ana TorresMadrid
Marta RuizMadrid
Noa VidalMadrid
Pablo SanzMadrid
Elena ReySevilla
Sara GómezSevilla

La condición equivale a preguntar si ciudad = 'Madrid' o ciudad = 'Sevilla', pero muestra la intención con menos repetición.

Por qué NOT IN y NULL requieren cuidado

Esperar un verdadero cuando el conjunto contiene NULL

Si no hay coincidencias pero el conjunto contiene un NULL, SQL puede producir un resultado desconocido en lugar de verdadero. En un WHERE, esa fila no pasa el filtro.

Consulta arriesgada
WHERE id NOT IN (
  SELECT cliente_id
  FROM lista_exclusiones
)

Cuando la columna de la subconsulta admite NULL, filtra esos valores expresamente o utiliza NOT EXISTS con una comparación correlacionada.

IN no sustituye todas las comparaciones. Para intervalos usa operadores o BETWEEN; para patrones usa LIKE; para comprobar nulos usa IS NULL.

Comprueba lo aprendido

Básica · lista de valores

Filtra tres estados de pedido

Muestra id, estado y total de los pedidos cuyo estado sea 'pendiente', 'pagado' o 'enviado'. Ordena por id.

Compatibilidad entre motores

La forma básica con listas y subconsultas pertenece al SQL ampliamente soportado. Los límites prácticos de tamaño, la optimización y algunas variantes de comparación por filas pueden cambiar. Las reglas de NULL no deben sustituirse por intuiciones de lenguajes con valores booleanos de solo dos estados.

Qué debes recordar

  • IN comprueba coincidencia con cualquier elemento del conjunto.
  • Una subconsulta usada con IN para comparar un solo valor debe devolver una columna.
  • NOT IN puede producir desconocido cuando interviene NULL.
  • Elige el operador que represente realmente la condición.

Conceptos relacionados

Fuentes técnicas consultadas