WHERE en SQL: qué es, cómo funciona y ejemplos prácticos

La cláusula WHERE en SQL se utiliza para filtrar filas de una consulta en base a una condición lógica.
Permite devolver solo aquellos registros que cumplen con uno o varios criterios, en lugar de procesar la tabla completa.

👉 Sin WHERE, todos los registros de la tabla son afectados por la consulta (SELECT, UPDATE, DELETE).

Sintaxis básica de WHERE

SELECT columna1, columna2, ...
FROM tabla
WHERE condición;

La condición puede usar:

  • Comparaciones (=, <>, >, <, >=, <=).
  • Operadores lógicos (AND, OR, NOT).
  • Funciones (BETWEEN, IN, LIKE, IS NULL, etc.).

Ejemplo básico de WHERE

SELECT * 
FROM empleados
WHERE departamento = 'Ventas';

👉 Devuelve solo los empleados del departamento de Ventas.

WHERE con operadores de comparación

-- Mayor que
SELECT * FROM productos WHERE precio > 100;

-- Diferente de
SELECT * FROM empleados WHERE cargo <> 'Gerente';

-- Menor o igual
SELECT * FROM pedidos WHERE cantidad <= 50;

WHERE con operadores lógicos

-- Dos condiciones (AND)
SELECT * FROM clientes
WHERE pais = 'España' AND ciudad = 'Madrid';

-- Una u otra (OR)
SELECT * FROM clientes
WHERE ciudad = 'Madrid' OR ciudad = 'Barcelona';

-- Negación (NOT)
SELECT * FROM productos
WHERE NOT categoria = 'Electrónica';

WHERE con BETWEEN

SELECT * FROM ventas
WHERE fecha BETWEEN '2025-01-01' AND '2025-03-31';

👉 Filtra ventas del primer trimestre de 2025.

WHERE con IN

SELECT * FROM pedidos
WHERE estado IN ('Pendiente','Enviado');

👉 Equivalente a varias condiciones OR.

WHERE con LIKE (patrones de texto)

-- Empieza con A
SELECT * FROM clientes WHERE nombre LIKE 'A%';

-- Termina en "ez"
SELECT * FROM clientes WHERE apellido LIKE '%ez';

-- Contiene "tech"
SELECT * FROM empresas WHERE nombre LIKE '%tech%';

WHERE con IS NULL / IS NOT NULL

SELECT * FROM facturas
WHERE fecha_pago IS NULL;

SELECT * FROM facturas
WHERE fecha_pago IS NOT NULL;

👉 Diferencia entre campos vacíos y nulos.

WHERE con subqueries

SELECT nombre
FROM clientes
WHERE id IN (
  SELECT cliente_id FROM pedidos WHERE total > 1000
);

👉 Devuelve clientes que tienen pedidos por más de 1000.

WHERE en UPDATE y DELETE

Además de SELECT, WHERE se usa en modificaciones:

UPDATE empleados
SET salario = salario * 1.1
WHERE departamento = 'IT';
DELETE FROM usuarios
WHERE activo = FALSE;

👉 Sin WHERE, todos los empleados o usuarios serían afectados.

Ejemplo combinado con múltiples condiciones

SELECT * FROM empleados
WHERE (departamento = 'Ventas' OR departamento = 'Marketing')
  AND salario > 2000
  AND fecha_contratacion >= '2024-01-01';

👉 Devuelve empleados de Ventas o Marketing, con salario > 2000 y contratados desde 2024.

Precedencia en condiciones de WHERE

  • Primero se evalúa NOT.
  • Luego AND.
  • Luego OR.

👉 Usar paréntesis aclara y evita errores.

Ejemplo:

-- Correcto
SELECT * FROM empleados
WHERE departamento = 'Ventas' OR (departamento = 'Marketing' AND salario > 2000);

Errores comunes con WHERE

  1. Olvidar comillas en cadenas de texto
WHERE nombre = Juan; -- ❌ Error
WHERE nombre = 'Juan'; -- ✅ Correcto
  1. Confundir NULL con cadena vacía
WHERE columna = NULL; -- ❌ Nunca devuelve nada
WHERE columna IS NULL; -- ✅ Correcto
  1. Usar condiciones ambiguas
WHERE precio > 100 OR < 50; -- ❌ Incorrecto
WHERE precio > 100 OR precio < 50; -- ✅ Correcto
  1. No usar paréntesis
    👉 Puede cambiar la lógica de evaluación.

Buenas prácticas con WHERE

  • Siempre validar con un SELECT antes de un DELETE o UPDATE.
  • Usar paréntesis para mayor claridad en expresiones lógicas.
  • Crear índices en columnas que se usan frecuentemente en WHERE.
  • Evitar funciones en columnas de filtro (ejemplo: WHERE YEAR(fecha) = 2025 → puede impedir uso de índices).
  • Usar BETWEEN y IN para simplificar múltiples condiciones.

Casos de uso comunes de WHERE

  1. Filtrar clientes por ubicación.
  2. Seleccionar pedidos por rango de fechas.
  3. Encontrar productos fuera de stock.
  4. Identificar empleados con sueldos fuera de rango.
  5. Actualizar registros específicos según condiciones.

WHERE en distintos motores de base de datos

  • MySQL / MariaDB → soporte completo, muy usado con índices.
  • PostgreSQL → soporta expresiones avanzadas, subqueries y operadores personalizados.
  • SQL Server → además de las funciones estándar, soporta condiciones con TOP en combinación.
  • Oracle → admite condiciones complejas con funciones analíticas.
  • SQLite → soporte completo, aunque limitado en funciones avanzadas.

Preguntas frecuentes (FAQ)

1. ¿Qué pasa si no pongo WHERE en una consulta?

  • En SELECT: devuelve todas las filas.
  • En DELETE: borra todas las filas.
  • En UPDATE: modifica todas las filas.

2. ¿Puedo usar funciones en WHERE?
Sí, pero puede impactar el rendimiento (ej. WHERE LOWER(nombre) = 'ana').

3. ¿Cuál es más rápido: IN o múltiples OR?
Generalmente IN es más eficiente y legible.

4. ¿Puedo usar subconsultas en WHERE?
Sí, tanto escalares como de múltiples filas.

5. ¿WHERE es lo mismo que HAVING?
No. WHERE filtra filas antes de agrupar; HAVING filtra después de GROUP BY.

Conclusión

La cláusula WHERE en SQL es esencial para trabajar con bases de datos:

  • Permite filtrar registros según condiciones.
  • Se aplica en SELECT, UPDATE y DELETE.
  • Se combina con operadores, funciones y subqueries.
  • Evita errores críticos, como modificar todas las filas por accidente.

Dominar WHERE es el primer gran paso para hacer consultas eficientes y precisas.

Perfecciona filtros y operadores en WHERE y condiciones y repasa más conceptos en el Glosario SQL completo.

Scroll al inicio