Cláusula WHERE en SQL: filtrar datos en las consultas
Lección 2.2 · Tiempo de lectura: ~6 min · Tareas de práctica ↓
La cláusula WHERE de SQL filtra las filas de una tabla evaluando una condición para cada registro: solo se devuelven las filas en las que la condición es verdadera. En esta lección aprenderás los operadores de comparación, BETWEEN, IN, la búsqueda de patrones con LIKE y la forma correcta de tratar los valores NULL.
La sentencia SELECT por sí sola devuelve todas las filas de una tabla. En los casos reales normalmente solo necesitas una parte de los datos que cumpla ciertos criterios, y la cláusula WHERE es justo la forma de expresarlos.
¿Qué es la cláusula WHERE de SQL?
La cláusula WHERE filtra los registros antes de que se devuelvan en el resultado. Garantiza que solo se incluyan las filas que cumplen la condición indicada.
Sintaxis básica
SELECT column1, column2, ...
FROM table_name
WHERE condition;
La condición es una expresión que se evalúa como verdadera, falsa o desconocida (cuando hay valores NULL). Solo se devuelven las filas en las que la condición es verdadera.
Operadores de comparación de SQL en WHERE
SQL ofrece un conjunto de operadores para comparar los valores de las columnas en la cláusula WHERE:
| Operador | Descripción | Ejemplo |
|---|---|---|
= | Igual a | WHERE last_name = 'SMITH' |
<> o != | Distinto de | WHERE store_id <> 1 |
> | Mayor que | WHERE rental_rate > 2.99 |
< | Menor que | WHERE length < 60 |
>= | Mayor o igual que | WHERE replacement_cost >= 20.00 |
<= | Menor o igual que | WHERE amount <= 5.00 |
SELECT title, rental_rate, replacement_cost
FROM film
WHERE rental_rate = 4.99;
Resultado: todas las películas cuyo precio de alquiler es exactamente 4,99 $.
Operadores BETWEEN, IN y LIKE de SQL
SQL incluye operadores potentes para filtrar por rango, por lista y por patrón.
BETWEEN: filtro por rango
Filtra los valores que están dentro de un rango (incluidos los dos extremos).
SELECT payment_id, amount, payment_date
FROM payment
WHERE amount BETWEEN 5.00 AND 10.00;
Resultado: los pagos de 5,00 $ a 10,00 $, ambos incluidos.
IN: coincidencia con una lista
Coincide con cualquier valor de una lista indicada. Es más limpio que varias condiciones OR.
SELECT first_name, last_name, store_id
FROM customer
WHERE store_id IN (1, 2);
Resultado: los clientes de la tienda 1 o de la tienda 2.
LIKE: búsqueda de patrones
Busca un patrón en una columna de texto usando comodines:
%: cero, uno o más caracteres._: exactamente un carácter.
-- Films whose title starts with 'A'
SELECT title
FROM film
WHERE title LIKE 'A%';
-- Films where the second letter is 'I'
SELECT title
FROM film
WHERE title LIKE '_I%';
Cómo filtrar valores NULL en SQL
No puedes usar = ni <> para comprobar NULL: esas comparaciones siempre devuelven desconocido, nunca verdadero. Tienes que usar IS NULL o IS NOT NULL.
-- Wrong: this returns no rows
-- WHERE return_date = NULL
-- Correct
SELECT rental_id, rental_date, return_date
FROM rental
WHERE return_date IS NULL;
Resultado: todos los alquileres que aún no se han devuelto.
Puntos clave:
- La cláusula
WHEREfiltra las filas antes de que se devuelvan en el resultado. - Los valores de texto y de fecha deben ir entre comillas simples (por ejemplo,
'SMITH'); los valores numéricos no necesitan comillas. BETWEENincluye los extremos:BETWEEN 5 AND 10incluye el 5 y el 10.INes una alternativa concisa a varias condicionesOR.- Usa
LIKEpara buscar patrones con%(cualquier secuencia) y_(un solo carácter). - Nunca uses
=conNULL: usa siempreIS NULLoIS NOT NULL.
Preguntas frecuentes
¿Qué diferencia hay entre WHERE y HAVING en SQL?
WHERE filtra las filas antes de agrupar y agregar. HAVING filtra después: trabaja sobre los resultados de GROUP BY. Usa WHERE para filtrar filas individuales y HAVING para filtrar grupos agregados.
¿Se pueden usar varias condiciones en una cláusula WHERE?
Sí. Combina condiciones con AND (las dos deben ser verdaderas), OR (basta con que una lo sea) o NOT (negación). También puedes usar paréntesis para controlar el orden de evaluación.
¿Por qué WHERE column = NULL no devuelve resultados?
Porque NULL representa un valor desconocido: comparar cualquier cosa con NULL mediante = siempre devuelve desconocido, no verdadero ni falso. SQL exige IS NULL o IS NOT NULL para comprobar la ausencia de valor.