Primero lo básico: WHERE sirve para elegir qué filas entran

WHERE va justo después de FROM y antes de ORDER BY. Su misión es sencilla: decirle a la base de datos qué filas quieres ver y cuáles no. Si no lo usas, te devuelve todo. Y cuando todo es mucho, la consulta deja de ser útil.

SELECT *
FROM facturas
WHERE estado = 'Pendiente';

Esa consulta solo trae las facturas pendientes. Parece poca cosa, pero en el día a día es la diferencia entre trabajar con una tabla manejable o perder tiempo bajando y subiendo por resultados que no te interesan.

Comparaciones simples: el pan de cada día

Puedes filtrar por igualdad, por mayor o menor, o por distinto. En una base real esto se traduce en cosas como "ventas mayores de 500", "clientes de Madrid" o "pedidos no cancelados".

SELECT cliente, importe, fecha
FROM ventas
WHERE importe > 500;

También puedes usar <, >=, <= y <> para "distinto de". Si vienes de Excel, piensa en WHERE como un filtro mucho más fino y mucho más potente.

Combinar condiciones con AND y OR

Aquí es donde mucha gente se lía un poco. AND significa que se tienen que cumplir todas las condiciones. OR significa que basta con una de ellas. Si mezclas ambas sin cuidado, el resultado cambia muchísimo.

SELECT id_factura, cliente, importe, estado
FROM facturas
WHERE estado = 'Pendiente'
  AND importe > 500
  AND fecha_factura >= '2026-07-01';

Esta consulta te devuelve facturas pendientes, caras y recientes. Es un caso típico cuando un responsable quiere revisar solo lo que de verdad requiere atención.

Ahora bien, si quieres combinar AND y OR, usa paréntesis. Sin paréntesis, SQL sigue su propio orden y luego llegan los "pero si yo quería otra cosa". Mira esto:

SELECT cliente, ciudad, segmento
FROM clientes
WHERE (ciudad = 'Madrid' OR ciudad = 'Barcelona')
  AND segmento = 'Empresa';

Filtros muy útiles: IN, BETWEEN, LIKE e IS NULL

IN te evita escribir un montón de OR cuando solo quieres varias opciones concretas.

SELECT cliente, ciudad
FROM clientes
WHERE ciudad IN ('Madrid', 'Barcelona', 'Valencia');

BETWEEN sirve para rangos, por ejemplo fechas o importes. Ojo: incluye los dos extremos.

SELECT cliente, importe, fecha
FROM ventas
WHERE importe BETWEEN 100 AND 1000;

LIKE te ayuda a buscar patrones de texto. Si quieres clientes que empiecen por "A", o emails que contengan cierto dominio, aquí tienes la herramienta.

SELECT nombre, email
FROM clientes
WHERE nombre LIKE 'A%';

Y IS NULL es clave para los campos vacíos. No uses = NULL, porque eso no funciona como esperas.

SELECT id_pedido, cliente
FROM pedidos
WHERE fecha_envio IS NULL;

Errores comunes que te hacen perder tiempo

  • Usar = NULL en vez de IS NULL. Ese es el fallo clásico.
  • Mezclar AND y OR sin paréntesis. El resultado puede ser totalmente distinto al que tenías en mente.
  • Poner ORDER BY antes de filtrar. Primero recortas filas, luego las ordenas.
  • Escribir mal las fechas o los textos. Las comillas no son decorado: muchas bases las necesitan.
  • Olvidar que LIKE depende del patrón. 'A%' no es lo mismo que '%A'.

Otro detalle que rompe consultas más de lo que parece: filtrar demasiado pronto o demasiado tarde dentro de una consulta más grande. Si estás uniendo tablas, revisa primero si el filtro va mejor antes o después del JOIN. No siempre da igual.

Cómo pensar un WHERE sin liarte

Lo más práctico es ir de lo simple a lo complejo. Empieza con una condición, comprueba que devuelve lo que esperas y luego añade la siguiente. Así detectas enseguida cuál de los filtros te está dejando fuera datos que sí querías ver.

En informes de oficina esto viene genial para sacar listados de pendientes, revisar cobros, localizar incidencias abiertas o preparar un extracto rápido para una reunión. Cuanto más claro escribas el filtro, menos tiempo perderás corrigiéndolo después.

Pro Tip

Mientras construyes una consulta, usa WHERE 1=1 para ir añadiendo filtros sin cambiar la estructura. Luego solo sumas líneas con AND y listo. Y si quieres probar varias versiones sin borrar nada, en muchos editores SQL Ctrl + / comenta o descomenta líneas al instante.