AND

El operador AND combina dos o más condiciones en una cláusula WHERE. Para que una fila aparezca en el resultado, todas las condiciones unidas por AND deben ser verdaderas. Si cualquiera de ellas es falsa, la fila se descarta.

Sintaxis

SELECT columnas
FROM tabla
WHERE condicion1
  AND condicion2
  AND condicion3;

Puedes encadenar tantas condiciones con AND como necesites. MySQL las evalúa de izquierda a derecha, aunque el optimizador puede reordenarlas internamente para mejorar el rendimiento.

Dos condiciones

El caso más habitual es combinar dos criterios de filtrado. Por ejemplo, productos de la categoría Smartphones (id 6) que cuesten menos de 800 euros:

SELECT nombre, precio, stock
FROM productos
WHERE categoria_id = 6
  AND precio < 800;
nombrepreciostock
Google Pixel 8699.0038
Xiaomi 14599.9980

De los 4 smartphones, solo 2 cuestan menos de 800 euros. El iPhone 15 Pro (1299.99) y el Samsung Galaxy S24 (899.99) cumplen la primera condición pero no la segunda, así que se descartan.

Tres o más condiciones

Puedes añadir tantas condiciones como necesites. Cada AND adicional hace el filtro más restrictivo:

SELECT nombre, precio, stock
FROM productos
WHERE categoria_id = 6
  AND precio < 1000
  AND stock > 50;
nombrepreciostock
Samsung Galaxy S24899.9962
Xiaomi 14599.9980

Ahora necesitamos smartphones con precio menor a 1000 y más de 50 unidades en stock. El Google Pixel 8 cumple las dos primeras condiciones pero tiene solo 38 unidades, así que no aparece.

AND con diferentes tipos de datos

El operador AND funciona con cualquier tipo de dato. Aquí combinamos una condición sobre texto, una sobre fecha y una sobre número:

SELECT id, fecha_pedido, estado, total
FROM pedidos
WHERE estado = 'entregado'
  AND total > 500
  AND fecha_pedido >= '2025-10-01';
idfecha_pedidoestadototal
12025-10-05 09:30:00entregado1349.98
22025-10-08 14:15:00entregado899.99
52025-11-02 10:20:00entregado1899.99

Pedidos entregados, con importe mayor a 500 euros, realizados a partir de octubre de 2025. Las tres condiciones deben cumplirse simultáneamente.

AND con rangos

AND es la forma natural de expresar rangos cuando no usas BETWEEN:

SELECT nombre, precio
FROM productos
WHERE precio >= 100
  AND precio <= 500;
nombreprecio
Zapatillas running pro129.99
Zapatillas trail149.99
Estantería modular149.99
Mancuernas ajustables199.99
Robot de cocina249.99
Escritorio ajustable399.00

Esta consulta es equivalente a WHERE precio BETWEEN 100 AND 500, que veremos más adelante. Ambas formas son válidas; BETWEEN es más concisa y AND con comparaciones es más explícita.

Tabla de verdad de AND

Para entender cómo se comporta AND con valores nulos, conviene conocer su tabla de verdad. MySQL usa lógica de tres valores: verdadero, falso y NULL (desconocido).

ABA AND B
TRUETRUETRUE
TRUEFALSEFALSE
TRUENULLNULL
FALSEFALSEFALSE
FALSENULLFALSE
NULLNULLNULL

El punto clave es que AND con un NULL devuelve NULL (a menos que el otro operando sea FALSE). Y una fila cuya condición evalúa a NULL se excluye del resultado, igual que si fuera FALSE.

Esto tiene implicaciones prácticas. Si buscas clientes con teléfono que empiece por "6":

SELECT nombre, telefono
FROM clientes
WHERE telefono IS NOT NULL
  AND telefono LIKE '6%';

La primera condición telefono IS NOT NULL filtra los 3 clientes sin teléfono. Sin ella, la condición telefono LIKE '6%' devolvería NULL para esos clientes (no FALSE), con el mismo efecto práctico en este caso. Pero ser explícito con IS NOT NULL deja clara la intención y evita sorpresas en consultas más complejas.

AND con OR

Cuando combinas AND y OR en la misma consulta, AND tiene mayor precedencia que OR. Esto significa que AND se evalúa antes que OR, igual que la multiplicación se evalúa antes que la suma en aritmética:

SELECT nombre, precio, categoria_id
FROM productos
WHERE categoria_id = 6
   OR categoria_id = 7
  AND precio > 1500;

Esta consulta no hace lo que podrías esperar a primera vista. Debido a la precedencia, MySQL la interpreta como:

WHERE categoria_id = 6
   OR (categoria_id = 7 AND precio > 1500)

Es decir: todos los smartphones o los portátiles que cuesten más de 1500. Para obtener "smartphones o portátiles que cuesten más de 1500", necesitas paréntesis:

WHERE (categoria_id = 6 OR categoria_id = 7)
  AND precio > 1500;
nombrepreciocategoria_id
ASUS ROG Zephyrus1899.997
Lenovo ThinkPad X11549.007

La regla es simple: siempre que mezcles AND y OR, usa paréntesis para dejar clara la agrupación. No confíes en la precedencia implícita.

Practica con AND

Usa el editor para combinar condiciones con AND. Prueba a filtrar por precio y stock simultáneamente:

Simulador SQL
Ctrl+Enter para ejecutar

En el siguiente artículo veremos el operador OR con más detalle.

Escrito por Eduardo Lázaro