Aprende SQL · lección gratuita

Lección 02 · Filtrar filas: WHERE

Resumen

WHERE selecciona qué filas entran en el resultado evaluando una condición fila por fila: solo pasan aquellas para las que la condición es verdadera. Mientras SELECT decide las columnas (vertical), WHERE decide las filas (horizontal). Es la cláusula que convierte una consulta genérica en una respuesta concreta a una pregunta de negocio.

Sintaxis / Conceptos

WHERE se escribe justo después del FROM: SELECT ... FROM tabla WHERE condicion;. En el orden lógico de ejecución, el motor aplica el WHERE después del FROM pero antes del SELECT. Esto tiene una consecuencia práctica importante: no puedes usar en el WHERE un alias definido en el SELECT, porque cuando se evalúa el filtro la proyección aún no existe; debes repetir la expresión.

Las cadenas de texto van entre comillas simples ('Ventas'), nunca dobles (en SQLite las comillas dobles son para identificadores). Los números van sin comillas. LIKE es insensible a mayúsculas para letras ASCII, mientras que = compara el texto tal cual.

Cuidado con la precedencia: A OR B AND C se interpreta como A OR (B AND C). Si quieres (A OR B) AND C, pon los paréntesis explícitamente. Es uno de los errores más frecuentes y silenciosos en SQL.

Sobre NULL: representa "valor desconocido". Cualquier comparación con NULL usando =, <>, <, etc. da como resultado NULL (que WHERE trata como "no pasa"), por eso existe IS NULL. La semilla de Nexus no tiene nulos, pero los verás aparecer en módulos posteriores con LEFT JOIN.

SELECT nombre, cargo, salario FROM empleados WHERE salario > 8000 ORDER BY salario DESC

Ejemplos

-- Empleados con salario superior a 8000
SELECT nombre, cargo, salario
FROM empleados
WHERE salario > 8000;

-- Igualdad de texto: clientes de un segmento concreto
SELECT empresa, pais, segmento
FROM clientes
WHERE segmento = 'Enterprise';

-- Combinar condiciones con AND / OR y paréntesis
SELECT empresa, pais, segmento
FROM clientes
WHERE pais = 'Perú' AND (segmento = 'Enterprise' OR segmento = 'Mid-Market');

-- Rango con BETWEEN (inclusivo) y lista con IN
SELECT nombre, precio
FROM productos
WHERE precio BETWEEN 1000 AND 5000;

SELECT id, estado, canal
FROM pedidos
WHERE estado IN ('Cancelado', 'Pendiente');

-- Patrón de texto con LIKE: productos cuyo nombre empieza por 'CRM'
SELECT nombre FROM productos
WHERE nombre LIKE 'CRM%';
💡 NOT IN y los nulos: si la lista de NOT IN contiene un NULL, la condición nunca devuelve verdadero y obtienes cero filas. No es un problema con literales fijos, pero sí cuando la lista viene de una subconsulta que puede traer nulos. Tenlo presente más adelante.

Cheatsheet

OperadorQué hace
= / <>Igual / distinto
> >= < <=Comparaciones numéricas y de fecha-texto
AND OR NOTCombinan condiciones (usa paréntesis)
BETWEEN a AND bRango inclusivo a ≤ x ≤ b
IN (...) / NOT IN (...)Pertenencia a una lista
LIKE 'a%' / '_'Patrón: % = varios chars, _ = un char
IS NULL / IS NOT NULLPrueba de ausencia de valor

---

← Consultas básicas: SELECT y FROMOrdenar y limitar: ORDER BY y LIMIT →

Ver todas las lecciones de Aprende SQL →