WHERE: decidir qué filas cumplen la condición

Seleccionar las columnas correctas no siempre es suficiente. Podemos necesitar únicamente clientes activos, pedidos confirmados o movimientos ocurridos dentro de un periodo.

WHERE permite expresar esa condición antes de devolver el resultado.

La idea

Cada fila se evalúa contra una condición lógica: una expresión cuyo resultado puede determinar si la fila cumple la regla. Si la condición es verdadera, la fila continúa en el resultado. Si es falsa o desconocida, queda fuera.

La tercera posibilidad, desconocida, aparece especialmente al trabajar con NULL. Por eso un valor nulo no se compara mediante = NULL.

Sintaxis

SELECT
    Columna1,
    Columna2
FROM dbo.Tabla
WHERE Condicion;

Las condiciones pueden utilizar comparaciones como =, <>, >, >=, < y <=. También pueden combinarse mediante AND, OR y NOT.

Ejemplo: comparar y combinar condiciones

Para obtener productos activos cuyo precio sea de al menos 300 pesos:

SELECT
    p.IdProducto,
    p.Nombre,
    p.Precio
FROM dbo.Producto AS p
WHERE p.Activo = 1
  AND p.Precio >= 300
ORDER BY p.Precio;

Las dos condiciones deben cumplirse porque están unidas mediante AND.

IdProducto Nombre Precio
1 Adaptador USB-C 349.00
4 Teclado compacto 629.90
3 Soporte para monitor 799.00

Variaciones frecuentes

Buscar dentro de una lista

SELECT
    p.IdPedido,
    p.IdCliente,
    p.Estado
FROM dbo.Pedido AS p
WHERE p.Estado IN ('Confirmado', 'Enviado');

IN evita repetir la misma columna en varias comparaciones unidas con OR.

Buscar por un patrón

SELECT
    c.IdCliente,
    c.Nombre
FROM dbo.Cliente AS c
WHERE c.Nombre LIKE N'A%';

El símbolo % representa cualquier cantidad de caracteres. En este caso, el nombre debe comenzar con A.

Encontrar valores nulos

SELECT
    c.IdCliente,
    c.Nombre
FROM dbo.Cliente AS c
WHERE c.Correo IS NULL;

Para solicitar lo contrario se utiliza IS NOT NULL.

Filtrar un periodo con hora

DATEADD desplaza una fecha una cantidad determinada de unidades. En DATEADD(DAY, 1, @FechaFinal), DAY indica la unidad, 1 la cantidad que se suma y @FechaFinal la fecha desde la que comienza el cálculo.

DECLARE @FechaInicial DATE = '2026-03-01';
DECLARE @FechaFinal   DATE = '2026-03-04';

SELECT
    p.IdPedido,
    p.FechaPedido,
    p.Estado
FROM dbo.Pedido AS p
WHERE p.FechaPedido >= @FechaInicial
  AND p.FechaPedido < DATEADD(DAY, 1, @FechaFinal);

El límite superior es exclusivo. Así incluimos todas las horas del 4 de marzo sin depender de que la columna guarde segundos, milisegundos o una precisión mayor.

Qué conviene comprobar

Cuando una condición mezcla AND y OR, los paréntesis hacen explícita la intención:

WHERE p.Activo = 1
  AND (p.Precio < 300 OR p.Existencia = 0);

Sin los paréntesis, SQL aplica su precedencia de operadores, es decir, un orden predefinido para decidir qué operaciones evalúa primero. La consulta puede ser válida y aun así devolver un conjunto distinto del que esperábamos.

También conviene revisar el tipo de dato. Una conversión implícita ocurre cuando SQL Server cambia automáticamente un valor a otro tipo para poder compararlo. Comparar una columna numérica o de fecha con texto puede provocar esa conversión, producir un error o impedir que el plan aproveche un acceso eficiente.

Relacionado con