La función MIN() en SQL se utiliza para obtener el valor mínimo de una columna.
Es una de las funciones de agregación más usadas junto a MAX(), AVG(), SUM() y COUNT().
👉 Permite encontrar el valor más pequeño en un conjunto de datos: el salario más bajo, la fecha más antigua, el precio mínimo, etc.
Sintaxis básica de MIN()
SELECT MIN(columna)
FROM tabla
[WHERE condición];
columna: la columna sobre la cual queremos calcular el mínimo.tabla: la tabla que contiene los datos.WHERE: opcional, permite filtrar antes de calcular (ver WHERE).
Ejemplo básico de MIN()
Supongamos la tabla productos:
| id | nombre | precio |
|---|---|---|
| 1 | Teclado | 25 |
| 2 | Monitor | 180 |
| 3 | Notebook | 750 |
| 4 | Mouse | 20 |
Consulta:
SELECT MIN(precio) AS precio_minimo
FROM productos;
Resultado:
| precio_minimo |
|---|
| 20 |
👉 Devuelve el precio más bajo de la tabla.
Ejemplos prácticos de MIN()
1) Obtener la fecha más antigua
SELECT MIN(fecha) AS primera_compra
FROM pedidos;
👉 Devuelve la primera compra registrada.
2) Salario más bajo en la empresa
SELECT MIN(salario) AS salario_minimo
FROM empleados;
3) MIN() con condición
SELECT MIN(total) AS pedido_mas_pequeno
FROM pedidos
WHERE cliente_id = 10;
👉 Devuelve el pedido más barato del cliente 10.
4) MIN() con texto
SELECT MIN(nombre) AS primer_nombre
FROM clientes;
👉 Devuelve el nombre que aparece primero alfabéticamente.
5) MIN() con GROUP BY
SELECT departamento, MIN(salario) AS salario_minimo
FROM empleados
GROUP BY departamento;
Resultado:
| departamento | salario_minimo |
|---|---|
| Ventas | 1200 |
| IT | 1800 |
| Marketing | 1500 |
👉 Devuelve el salario más bajo en cada departamento (más sobre GROUP BY).
6) Obtener la fila completa con el valor mínimo
En SQL estándar, MIN() devuelve solo el valor. Para obtener toda la fila se suele usar una subconsulta:
SELECT *
FROM empleados
WHERE salario = (
SELECT MIN(salario) FROM empleados
);
👉 Devuelve al empleado con el salario más bajo.
En MySQL y PostgreSQL también puede hacerse con ORDER BY + LIMIT:
SELECT * FROM empleados
ORDER BY salario ASC
LIMIT 1;
MIN() y valores NULL
- MIN() ignora valores NULL.
- Solo considera filas con valores válidos.
Ejemplo:
SELECT MIN(precio)
FROM productos;
👉 Si algunos precios son NULL, no afectan el resultado.
MIN() vs otras funciones de agregación
- MAX() → devuelve el valor máximo.
- AVG() → devuelve el promedio.
- SUM() → devuelve la suma.
- COUNT() → cuenta filas (o valores no nulos).
👉 MIN() y MAX() son opuestos: uno devuelve el más pequeño y el otro el más grande.
Errores comunes al usar MIN()
- Olvidar usar GROUP BY
-- ❌ Error en SQL estándar
SELECT departamento, MIN(salario)
FROM empleados;
Debe ser:
SELECT departamento, MIN(salario)
FROM empleados
GROUP BY departamento;
- Confundir MIN() con ORDER BY
MIN()devuelve solo el valor mínimo.ORDER BY ... ASC LIMIT 1devuelve la fila completa.
- Esperar que MIN() cuente nulos
👉 LosNULLson ignorados. Si todos los valores sonNULL, devuelveNULL.
Buenas prácticas con MIN()
- Usar alias (
AS) para resultados más claros. - Combinar con
GROUP BYpara mínimos por categoría. - Usar
MIN()solo para obtener el valor. Para traer toda la fila, usar subconsultas oORDER BY. - Si se usa en grandes tablas, asegurarse de tener índices en la columna para mejorar el rendimiento.
Ejemplo avanzado: precio mínimo por categoría
SELECT categoria, nombre, precio
FROM productos p
WHERE precio = (
SELECT MIN(precio)
FROM productos
WHERE categoria = p.categoria
);
👉 Devuelve el producto más barato dentro de cada categoría.
MIN() en distintos motores de bases de datos
- MySQL: soportado.
- PostgreSQL: soportado.
- SQL Server: soportado.
- Oracle: soportado.
👉 Forma parte del estándar SQL y funciona de la misma manera en todos los principales SGBD.
Preguntas frecuentes (FAQ)
1. ¿MIN() cuenta valores nulos?
No, los ignora.
2. ¿Se puede usar MIN() con texto?
Sí, devuelve el valor alfabéticamente más pequeño.
3. ¿Qué diferencia hay entre MIN() y ORDER BY ASC LIMIT 1?
MIN()devuelve solo el valor.ORDER BY ASC LIMIT 1devuelve la fila completa.
4. ¿Puedo usar MIN() en subconsultas?
Sí, es una práctica común.
5. ¿Qué pasa si todos los valores son NULL?
El resultado será NULL.
Conclusión
La función MIN() en SQL es fundamental para identificar el valor más pequeño de una columna, ya sea un número, una fecha o un texto.
- Es ideal para reportes y estadísticas.
- Se combina con
GROUP BYpara obtener mínimos por grupo. - Se usa con subconsultas para traer filas completas.
Dominar su uso es clave para análisis de datos y consultas avanzadas.
Consulta mínimos y otros agregados en Funciones de agregación y repasa el Glosario SQL completo.