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

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:

idnombreprecio
1Teclado25
2Monitor180
3Notebook750
4Mouse20

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:

departamentosalario_minimo
Ventas1200
IT1800
Marketing1500

👉 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()

  1. 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;
  1. Confundir MIN() con ORDER BY
  • MIN() devuelve solo el valor mínimo.
  • ORDER BY ... ASC LIMIT 1 devuelve la fila completa.
  1. Esperar que MIN() cuente nulos
    👉 Los NULL son ignorados. Si todos los valores son NULL, devuelve NULL.

Buenas prácticas con MIN()

  • Usar alias (AS) para resultados más claros.
  • Combinar con GROUP BY para mínimos por categoría.
  • Usar MIN() solo para obtener el valor. Para traer toda la fila, usar subconsultas o ORDER 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 1 devuelve 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 BY para 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.

Scroll al inicio