La instrucción SELECT es la más usada en SQL. Recupera datos de una o varias tablas y devuelve un conjunto de filas y columnas llamado result set. A diferencia de otros lenguajes, SELECT es declarativo: describes qué quieres, no cómo calcularlo; el motor decide el plan de ejecución más eficiente.
En este capítulo cubrimos la forma básica del SELECT: elegir columnas, calcular expresiones, usar alias, eliminar duplicados con DISTINCT y manejar valores NULL.
SELECT *: todas las columnas
SELECT * FROM clientes;
Devuelve todas las columnas de la tabla. En producción, evita SELECT *: si la tabla cambia, el código que procesa los resultados puede romperse, y además traes columnas que quizá no necesitas, consumiendo ancho de banda y memoria innecesariamente.
Seleccionar columnas específicas
SELECT nombre, email, ciudad FROM clientes;
Solo se devuelven las columnas indicadas, en el orden que especifiques. El orden de las columnas en el SELECT no tiene por qué coincidir con el orden de las columnas en la tabla.
Alias de columna con AS
-- Alias simples SELECT nombre AS cliente, email AS correo FROM clientes; -- Alias con espacios (comillas dobles o backticks según motor) SELECT nombre AS "Nombre completo", fecha_alta AS "Fecha de alta" FROM clientes; -- En MySQL también funciona sin AS SELECT nombre cliente, email correo FROM clientes;
Los alias son especialmente útiles cuando la columna viene de una expresión calculada y no tiene nombre propio.
Expresiones y cálculos en SELECT
-- Calcular el precio con IVA (21%)
SELECT
nombre,
precio AS precio_sin_iva,
ROUND(precio * 1.21, 2) AS precio_con_iva,
stock,
ROUND(precio * stock, 2) AS valor_inventario
FROM productos;
-- Concatenar columnas (MySQL: CONCAT; PostgreSQL: ||)
SELECT CONCAT(nombre, ' — ', ciudad) AS cliente_ciudad FROM clientes;
DISTINCT: eliminar filas duplicadas
-- ¿En qué ciudades hay clientes? SELECT DISTINCT ciudad FROM clientes; -- DISTINCT afecta a todas las columnas del SELECT SELECT DISTINCT ciudad, YEAR(fecha_alta) AS anyo FROM clientes ORDER BY anyo;
NULL: el valor desconocido
NULL significa «valor desconocido». No es cero ni cadena vacía. Cualquier operación aritmética o comparación con NULL devuelve NULL:
-- Esto siempre devuelve NULL, no TRUE: SELECT 5 + NULL; -- NULL SELECT 'texto' = NULL; -- NULL -- Para comprobar NULL, usa IS NULL / IS NOT NULL SELECT nombre, ciudad FROM clientes WHERE ciudad IS NULL; -- COALESCE: devuelve el primer valor no-NULL SELECT nombre, COALESCE(ciudad, 'Sin ciudad') AS ciudad FROM clientes; -- IFNULL (MySQL): equivalente más corto a COALESCE con dos argumentos SELECT nombre, IFNULL(ciudad, 'Sin ciudad') AS ciudad FROM clientes; -- NULLIF(a, b): devuelve NULL si a = b, si no devuelve a -- Útil para evitar divisiones por cero: SELECT total / NULLIF(unidades, 0) AS precio_medio FROM pedidos;
Entender NULL es fundamental para escribir consultas correctas. Un error común es comparar con = NULL en lugar de IS NULL: la primera expresión siempre devuelve NULL (falso), nunca encuentra filas.
