Cuando comienzas a aprender SQL, uno de los primeros conceptos que debes dominar es la cláusula WHERE. Esta cláusula es la que te permite filtrar resultados y decirle al motor de base de datos qué filas quieres consultar, actualizar o eliminar.
En este artículo vamos a ver:
- Qué es la cláusula WHERE en SQL.
- Sintaxis general y ejemplos prácticos.
- Diferencias de comportamiento entre motores (MySQL, PostgreSQL, SQL Server y SQLite).
- Cómo practicar los ejemplos directamente en db-fiddle.com.
- Buenas prácticas que te ayudarán a evitar errores comunes.
1. ¿Qué es la cláusula WHERE en SQL?
La cláusula WHERE establece una condición que debe cumplirse para que una fila sea incluida en el resultado de una consulta o en la ejecución de una operación.
👉 Si no usas WHERE, la instrucción afectará todas las filas de la tabla.
Esto puede ser útil en un SELECT, pero muy peligroso en un UPDATE o DELETE.
Ejemplo:
DELETE FROM empleados; Sin WHERE, eliminarías todos los registros de la tabla empleados.
2. Sintaxis general de WHERE
SELECT columnas
FROM tabla
WHERE condición; La condición puede ser:
- Una comparación (>, <, =, !=, >=, <=).
- Una lista de valores (
IN). - Un rango (
BETWEEN). - Un patrón (
LIKE). - Una combinación lógica con
AND,OR,NOT.
3. Estructura de tablas y datos ficticios para practicar
Para seguir los ejemplos, puedes crear la siguiente tabla de empleados en db-fiddle.com:
CREATE TABLE empleados (
id INTEGER PRIMARY KEY,
nombre TEXT,
departamento TEXT,
salario DECIMAL(10,2),
fecha_contratacion DATE
);
INSERT INTO empleados (id, nombre, departamento, salario, fecha_contratacion) VALUES
(1, 'Ana Torres', 'Ventas', 48000, '2019-03-15'),
(2, 'Luis Gómez', 'Marketing', 52000, '2020-07-01'),
(3, 'María Pérez', 'Ventas', 61000, '2018-11-20'),
(4, 'Carlos Ruiz', 'Finanzas', 45000, '2021-02-10'),
(5, 'Elena Díaz', 'Ventas', 39000, '2017-09-05'),
(6, 'Pedro López', 'Recursos Humanos', 43000, '2016-06-18'),
(7, 'Sofía Hernández', 'Marketing', 57000, '2022-01-12');
Con esta tabla podrás probar todos los ejemplos a continuación.
4. Ejemplos prácticos con WHERE
4.1 Comparaciones básicas
SELECT * FROM empleados
WHERE salario > 50000; Devuelve los empleados con salario mayor a 50,000.
4.2 Operadores lógicos (AND, OR, NOT)
SELECT * FROM empleados
WHERE departamento = 'Ventas' AND salario >= 40000;
Filtra empleados del departamento Ventas con salario igual o mayor a 40,000.
4.3 Rango de valores con BETWEEN
SELECT * FROM empleados
WHERE fecha_contratacion BETWEEN '2019-01-01' AND '2021-12-31'; Devuelve empleados contratados entre 2019 y 2021.
4.4 Conjunto de valores con IN
SELECT * FROM empleados
WHERE departamento IN ('Ventas', 'Marketing'); Devuelve empleados que trabajan en Ventas o Marketing.
4.5 Búsqueda de patrones con LIKE
SELECT * FROM empleados
WHERE nombre LIKE 'M%'; Devuelve empleados cuyo nombre comienza con “M”.
5. Diferencias entre motores de bases de datos
Aunque la cláusula WHERE sigue el estándar SQL, el comportamiento de LIKE varía según el motor de base de datos:
- SQL Server
LIKEno distingue mayúsculas/minúsculas por defecto (depende de la collation).
- MySQL
LIKEsuele ser case-insensitive conutf8_general_ci.
- PostgreSQL
LIKEdistingue mayúsculas/minúsculas.- Para ignorar diferencias se usa
ILIKE.
- SQLite
LIKEes case-insensitive para ASCII, pero case-sensitive para Unicode.
👉 Por eso una consulta como WHERE nombre LIKE 'm%' puede devolver resultados distintos según el motor.
6. WHERE en UPDATE y DELETE
Ejemplo con UPDATE
UPDATE empleados
SET salario = salario * 1.10
WHERE departamento = 'Ventas'; Aumenta en un 10% el salario de empleados de Ventas.
Ejemplo con DELETE
DELETE FROM empleados
WHERE fecha_contratacion < '2018-01-01'; Elimina empleados contratados antes de 2018.
⚠️ Importante: si olvidas WHERE, eliminarás todos los registros.
7. Buenas prácticas con WHERE
- Probar primero con SELECT antes de un
UPDATEoDELETE. - Usar índices en columnas filtradas para mejorar el rendimiento.
- Evitar funciones en la condición cuando sea posible:
-- Menos eficiente
WHERE YEAR(fecha_contratacion) = 2020
-- Más eficiente
WHERE fecha_contratacion BETWEEN '2020-01-01' AND '2020-12-31'; - Revisar sensibilidad a mayúsculas/minúsculas según el motor.
- Condiciones claras y específicas: evita
WHERE 1=1salvo en casos avanzados.
8. Conclusión
La cláusula WHERE es fundamental para filtrar datos en SQL. Con ella puedes seleccionar registros específicos, actualizar solo lo necesario y evitar eliminaciones accidentales.
- Practicar en plataformas como db-fiddle.com es una forma rápida y segura de aprender.
- Conocer las diferencias entre motores te ayudará a escribir consultas portables.
- Aplicar buenas prácticas asegura que tus consultas sean más rápidas, claras y seguras.