🕒 6 min de lectura

Introducción a SQL: 4. El arte de la selección

Publicado el 26 de mayo de 2026

Introducción a SQL: 4. El arte de la selección

En la entrada anterior conocimos el DML y sus cuatro operaciones fundamentales. De todas ellas, el SELECT es sin duda la más importante y la que más usarás a lo largo de tu carrera. Esta sentencia es la que nos permite recuperar datos específicos de una o varias tablas, y aunque parece simple al principio, es una herramienta profunda: no solo muestra lo que existe, sino que nos permite transformar datos crudos en información con valor real para la toma de decisiones.

Esta entrada le dedica su propio espacio, porque se lo merece.


1. La anatomía de una consulta

Toda consulta SELECT sigue una estructura lógica que el motor de la base de datos interpreta en orden:

  • SELECT: Define las columnas (atributos) que queremos ver.
  • FROM: Especifica la tabla de donde provienen los datos.
-- Recuperamos solo el nombre y el salario de la tabla empleados
SELECT nombre, salario 
FROM empleados;
Select all

Aunque el uso de SELECT * (seleccionar todo) es muy común, en entornos productivos se considera una mala práctica. Siempre es mejor especificar los nombres de las columnas para optimizar el ancho de banda y mejorar el rendimiento del sistema.


2. Filtrado con WHERE

Los datos no se consultan de forma masiva sin un propósito. Las decisiones de negocio requieren segmentación: identificar solo a los empleados cuyo apellido comience con "A", aquellos con salario superior a cierto umbral o quienes pertenezcan a un departamento específico.

Para lograr esta precisión, SELECT se apoya en la cláusula WHERE, que evalúa cada fila y decide si entra o no en nuestro resultado.

-- Filtramos empleados del departamento de 'IT' con salario mayor a 5000
SELECT nombre, puesto 
FROM empleados 
WHERE departamento = 'IT' 
  AND salario > 5000;

Dentro del WHERE aplicamos operadores lógicos y de comparación. Los más comunes —y que funcionan en prácticamente todos los motores de base de datos— son los siguientes:

Comparación

  • = Igual a
  • <> / != Diferente de
  • > / < Mayor / Menor que
  • >= / <= Mayor o igual / Menor o igual
  • BETWEEN Entre un rango
  • IN Dentro de una lista

Lógicos

  • AND Devuelve TRUE si todas las condiciones son verdaderas.
  • OR Devuelve TRUE si al menos una condición es verdadera.
  • NOT Invierte el valor lógico de la condición.
  • IS NULL Verifica si un valor está vacío.

Pattern Matching

  • LIKE Busca un patrón específico.
  • % Comodín que representa cero o más caracteres.
  • _ Comodín que representa un solo carácter.
  • ILIKE (En algunos motores) LIKE sin distinguir mayúsculas.

3. Ordenamiento y valores únicos

ORDER BY

En SQL, los registros no tienen un orden natural garantizado. Si necesitas que tu resultado aparezca organizado, debes pedírselo explícitamente con ORDER BY.

Por defecto ordena de forma ascendente (ASC), pero puedes especificar DESC para invertir el orden:

-- Para ver quién tiene el salario más alto primero
SELECT nombre, salario 
FROM empleados 
ORDER BY salario DESC;

💡 PRO TIP: Ordenamiento por posición

En SQL puedes referenciar las columnas por su índice numérico en lugar de su nombre. En el ejemplo anterior, el número 2 representa la segunda columna definida en el SELECT (salario).

-- El resultado es idéntico al ordenar por 'salario'
SELECT nombre, salario
FROM empleados
ORDER BY 2 DESC;

Nota extra: Aunque es muy útil para consultas rápidas, úsalo con precaución en código que va a producción. Si en el futuro añades o reordenas columnas en tu SELECT, el número dejará de apuntar al dato correcto sin lanzar ningún error.

DISTINCT
Uso de DISTINCT

DISTINCT elimina las filas duplicadas del resultado, devolviendo únicamente valores únicos por columna o combinación de columnas:

-- Devuelve cada departamento una sola vez, sin repeticiones
SELECT DISTINCT departamento 
FROM empleados;

También funciona combinado con COUNT para contar cuántos valores únicos existen:

-- ¿Cuántos departamentos distintos hay en la empresa?
SELECT COUNT(DISTINCT departamento) AS total_departamentos
FROM empleados;
LIMIT

LIMIT restringe cuántas filas devuelve la consulta. Es útil para explorar datos rápidamente o para paginación en aplicaciones:

-- Muestra solo los 5 empleados con mayor salario
SELECT nombre, salario
FROM empleados
ORDER BY salario DESC
LIMIT 5;

⚠️ Nota de compatibilidad: LIMIT funciona en PostgreSQL, MySQL y SQLite. En SQL Server se usa TOP y en Oracle FETCH FIRST n ROWS ONLY. La lógica es la misma; solo cambia la sintaxis según el motor.


4. Transformación de datos con columnas calculadas

Un error común es pensar que el SELECT solo muestra lo que ya existe en la tabla. En realidad, nos permite crear "columnas calculadas" que no están guardadas físicamente pero que son útiles para reportes y análisis.

Operadores aritméticos — realizan cálculos directamente sobre columnas numéricas:

-- Calculamos el salario anual de cada empleado
SELECT nombre, (salario * 12) AS "Salario Anual"
FROM empleados;

La columna Salario Anual no existe en la tabla; es calculada al vuelo para cada fila del resultado.

Concatenación — combina dos o más cadenas de texto en una sola. En el estándar SQL y en Oracle se usan barras dobles ||; en MySQL se usa la función CONCAT():

-- Mostramos nombre completo en una sola columna
SELECT nombre || ' ' || apellido AS "Nombre Completo"
FROM empleados;

Las comillas simples ' ' agregan el espacio entre nombre y apellido.


5. Alias con AS

Cuando consultamos una tabla, los encabezados de columna suelen mostrar nombres técnicos definidos por el administrador de la base de datos: abreviaciones, guiones bajos, mayúsculas. Para presentar resultados más legibles usamos alias a través de AS.

-- Alias sencillo sin espacios
SELECT nombre AS Empleado, salario AS Sueldo
FROM empleados;

-- Alias con espacios: requiere comillas dobles
SELECT nombre, (salario * 12) AS "Salario Anual"
FROM empleados;

💡

El alias solo cambia el nombre en el resultado de la consulta; no modifica el nombre real de la columna en la tabla. Además, no puedes reutilizar un alias dentro de la cláusula WHERE de esa misma consulta, ya que SQL procesa el WHERE antes de asignar los alias del SELECT.


Conclusión

Dominar el SELECT es mucho más que aprender una sintaxis; es adquirir la capacidad de interrogar una base de datos con precisión. Como vimos, no se limita a mostrar columnas: filtra con WHERE, ordena con ORDER BY, elimina duplicados con DISTINCT, limita resultados con LIMIT, y transforma datos con cálculos y concatenaciones en tiempo real.

La eficiencia siempre importa. Un buen desarrollador SQL no solo busca que la consulta funcione, sino que sea rápida y legible: evitar el SELECT *, nombrar bien los alias y entender en qué orden ejecuta SQL cada cláusula son hábitos que marcan la diferencia cuando las consultas se vuelven complejas.

En la próxima entrada daremos el salto a uno de los conceptos más importantes: los JOINs. Aprenderemos a combinar información de múltiples tablas en una sola consulta, que es donde el SQL empieza a volverse realmente útil.

¡Gracias por leer y nos vemos en la próxima consulta!

Volver al inicio