Contenido de esta guía
Qué significa BETWEEN
BETWEEN expresa un intervalo cerrado. La condición valor BETWEEN minimo AND maximo equivale, para comparaciones ordinarias, a exigir valor >= minimo y valor <= maximo.
Los dos extremos están incluidos. Esta característica resulta útil para números y fechas, pero puede provocar errores si se olvida al contar rangos consecutivos.
Sintaxis y límites
SELECT columnas
FROM tabla
WHERE expresion BETWEEN limite_inferior AND limite_superior;Escribe primero el límite menor y después el mayor. No presupongas que el motor los intercambiará. Si alguno de los valores comparados es NULL, la condición no es verdadera.
Ejemplo guiado: pedidos de un periodo
SELECT id, fecha, estado, total
FROM pedidos
WHERE fecha BETWEEN '2025-06-01' AND '2025-06-10'
ORDER BY fecha, id;| id | fecha | estado | total |
|---|---|---|---|
| 111 | 2025-06-01 | pendiente | 249,0 |
| 112 | 2025-06-03 | enviado | 54,0 |
| 113 | 2025-06-06 | enviado | 98,0 |
| 114 | 2025-06-08 | pendiente | 203,9 |
| 115 | 2025-06-10 | enviado | 24,0 |
Fechas frente a marcas de tiempo
El ejemplo funciona porque fecha guarda días completos en formato ISO. Si la columna incluye hora, BETWEEN '2025-06-01' AND '2025-06-10' puede interpretar el segundo límite como el inicio del 10 de junio y excluir horas posteriores de ese día.
Para periodos de tiempo suele ser más robusto usar un intervalo semiabierto: incluir el inicio y excluir el comienzo del periodo siguiente.
WHERE creado_en >= '2025-06-01'
AND creado_en < '2025-07-01'Esta forma cubre todo junio sin tener que inventar una «última hora» del mes.
Errores frecuentes
Creer que el límite final está excluido
BETWEEN 50 AND 100 acepta 50 y 100. Para excluirlos, escribe comparaciones con > y <.
Comparar fechas almacenadas como texto no ordenable
Formatos como «10/06/2025» no mantienen el orden cronológico al compararse como texto. Utiliza tipos de fecha del motor o un formato consistente y documentado.
Práctica guiada
Productos entre 50 y 100 euros
Muestra nombre y precio de los productos cuyo precio esté entre 50 y 100, incluidos ambos límites. Ordena por precio y, en caso de empate, por nombre.
precio.BETWEEN 50 AND 100.ORDER BY precio, nombre.Solución razonada
SELECT nombre, precio
FROM productos
WHERE precio BETWEEN 50 AND 100
ORDER BY precio, nombre;El resultado contiene Altavoz (54,0), Auriculares (69,9) y Disco SSD (89,0). Los límites serían válidos si existiera un producto con precio exactamente 50 o 100.
Compatibilidad entre motores
El carácter inclusivo de BETWEEN es portable. Lo que cambia es el sistema de tipos, la interpretación de literales de fecha y la conversión implícita. Utiliza parámetros con tipos adecuados y comprueba la zona horaria cuando trabajes con instantes.
Qué debes recordar
BETWEENincluye los dos límites.- El límite menor debe escribirse primero.
- Con marcas de tiempo, suele convenir un intervalo semiabierto.
- Los tipos y formatos de fecha deben ser coherentes.
Conceptos relacionados
Fuentes técnicas consultadas
Para construir un filtro completo con horas y probar sus límites, sigue la guía de cómo filtrar entre dos fechas en SQL.