Aprende SQL · lección gratuita
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.
=, <> (distinto), <, <=, >, >=.AND, OR, NOT. Usa paréntesis para fijar la precedencia (AND se evalúa antes que OR).BETWEEN a AND b (inclusivo en ambos extremos).IN (...) y NOT IN (...) para comparar contra una lista.LIKE con comodines % (cualquier secuencia) y _ (un carácter).IS NULL / IS NOT NULL, nunca con =.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
-- 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 INy los nulos: si la lista deNOT INcontiene unNULL, 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.
| Operador | Qué hace |
|---|---|
= / <> | Igual / distinto |
> >= < <= | Comparaciones numéricas y de fecha-texto |
AND OR NOT | Combinan condiciones (usa paréntesis) |
BETWEEN a AND b | Rango inclusivo a ≤ x ≤ b |
IN (...) / NOT IN (...) | Pertenencia a una lista |
LIKE 'a%' / '_' | Patrón: % = varios chars, _ = un char |
IS NULL / IS NOT NULL | Prueba de ausencia de valor |
---
← Consultas básicas: SELECT y FROMOrdenar y limitar: ORDER BY y LIMIT →