Filtros · lógica booleana

AND, OR y NOT

Combina condiciones de forma predecible y evita filtros que cambian de significado por la precedencia o por valores NULL.

Lectura: 6–8 minEjemplos comprobadosPráctica con pistas
Contenido de esta guía

Qué significan AND, OR y NOT

AND, OR y NOT combinan o niegan condiciones booleanas. En un WHERE, una fila se conserva cuando la condición completa resulta verdadera.

  • AND: exige que se cumplan las dos condiciones.
  • OR: basta con que se cumpla al menos una.
  • NOT: niega el resultado de una condición.

SQL no trabaja únicamente con verdadero y falso: cuando interviene NULL, una comparación puede producir un tercer estado lógico, desconocido (UNKNOWN). Esa diferencia importa al combinar filtros.

Sintaxis mínima

SQL
SELECT columnas
FROM tabla
WHERE condicion_a AND condicion_b;

SELECT columnas
FROM tabla
WHERE condicion_a OR condicion_b;

SELECT columnas
FROM tabla
WHERE NOT condicion;

La precedencia puede cambiar el filtro

NOT se evalúa antes que AND, y AND antes que OR. Aunque conozcas esa precedencia, usa paréntesis cuando varias condiciones expresen una regla de negocio: reducen ambigüedad y hacen la consulta más fácil de revisar.

Más claro
WHERE (categoria = 'Accesorios' OR categoria = 'Audio')
  AND stock > 0;

Lee los paréntesis como una frase. Primero acepta Accesorios o Audio; después exige stock positivo a cualquiera de los dos grupos.

Ejemplo guiado: combinar categoría y stock

Productos de ejemplo
nombrecategoriastock
TecladoAccesorios12
RatónAccesorios0
AltavozAudio7
AuricularesAudio0
MonitorPantallas4
SQL
SELECT nombre, categoria, stock
FROM productos
WHERE (categoria = 'Accesorios' OR categoria = 'Audio')
  AND stock > 0
ORDER BY nombre;
Resultado comprobado
nombrecategoriastock
AltavozAudio7
TecladoAccesorios12

Qué cambia cuando aparece NULL

Una comparación como descuento > 0 no es verdadera ni falsa cuando descuento vale NULL: su resultado es desconocido. Negarla con NOT tampoco convierte ese caso en verdadero.

Incluye explícitamente los ausentes
WHERE descuento IS NULL
   OR descuento <= 0;

Si necesitas tratar los valores ausentes como un caso propio, expresalo con IS NULL o IS NOT NULL; no confíes en una comparación ordinaria.

Errores frecuentes

!
Mezclar AND y OR sin hacer visible la intención

La consulta puede ser sintácticamente válida y devolver un conjunto distinto del que imaginabas. Añade paréntesis alrededor de las reglas que deban evaluarse juntas.

!
Escribir = NULL o <> NULL

Las comparaciones ordinarias con NULL no producen verdadero o falso. Usa IS NULL y IS NOT NULL.

Práctica: clientes de Madrid o Valencia

Básica · filtros combinados

Muestra clientes activos de dos ciudades

Con estos datos, devuelve los clientes cuyo estado sea activo y cuya ciudad sea Madrid o Valencia. Ordena por nombre.

Pista 1

Agrupa las dos ciudades dentro de paréntesis.

Pista 2

La condición de estado debe aplicarse a cualquiera de las dos ciudades.

Ver solución explicada
SELECT nombre, ciudad
FROM clientes
WHERE estado = 'activo'
  AND (ciudad = 'Madrid' OR ciudad = 'Valencia')
ORDER BY nombre;

Los paréntesis crean primero el conjunto Madrid/Valencia. AND exige después que cada fila seleccionada esté activa.

Compatibilidad entre motores

AND, OR y NOT son operadores habituales y portables. MySQL también documenta operadores alternativos como && o !, pero usarlos reduce portabilidad. Para material educativo y consultas que deban moverse entre motores, preferí las palabras clave SQL.

Qué debes recordar

  • AND exige condiciones simultáneas; OR ofrece alternativas; NOT niega.
  • Los paréntesis hacen explícita la intención cuando mezclas operadores.
  • Con NULL puede aparecer el estado UNKNOWN; trátalo de forma explícita.

Conceptos relacionados

Fuentes técnicas consultadas