BASES DATOS

SQL

Lenguaje para consultar y modificar bases de datos relacionales. Se le pide qué datos se quieren, no cómo buscarlos: de eso se encarga el motor.

Nivel · principiante4 min de lecturaActualizado 23 ago 2026
También conocido como: Structured Query Language

Definición

SQL (Structured Query Language) es el lenguaje con el que se habla con una base de datos relacional. Se usa para consultar, insertar, modificar y borrar datos, y también para definir la estructura de las tablas.

Su característica más interesante es que es declarativo: describes qué quieres, no cómo obtenerlo. Tú pides "los clientes de Barcelona con más de tres pedidos este año" y el motor decide por dónde empieza, qué índices usa y en qué orden cruza las tablas. Ese trabajo lo hace el planificador de consultas, y suele hacerlo mejor de lo que lo harías tú a mano.

Tiene más de cincuenta años y sigue siendo la respuesta correcta a la mayoría de problemas de datos. Pocas tecnologías aguantan eso.

Cómo funciona

Una consulta se lee así:

SELECT c.nombre, COUNT(p.id) AS pedidos
FROM clientes c
JOIN pedidos p ON p.cliente_id = c.id
WHERE c.provincia = 'Barcelona'
GROUP BY c.id, c.nombre
HAVING COUNT(p.id) > 3
ORDER BY pedidos DESC;

Las piezas:

  • SELECT — qué columnas quieres.
  • FROM / JOIN — de qué tablas y cómo se relacionan.
  • WHERE — qué filas filtras, antes de agrupar.
  • GROUP BY — cómo agrupas para calcular totales.
  • HAVING — filtro después de agrupar. Confundirlo con WHERE es el error clásico.
  • ORDER BY / LIMIT — orden y cuántas filas.

Los JOIN son el corazón del asunto: cruzan tablas por una columna común. INNER JOIN devuelve solo lo que casa en ambas; LEFT JOIN devuelve todo lo de la izquierda aunque no haya pareja a la derecha. La diferencia entre ambos explica la mitad de los informes que salen mal.

Ejemplo práctico

En el CRM de IMDICA, casi todo lo que se ve en pantalla es SQL por debajo: qué presupuestos están abiertos, qué pedidos van con retraso, qué márgenes deja cada cliente.

El caso que mejor enseña por qué merece la pena entenderlo: teníamos que unir dos tablas de precios, la de tarifas públicas y la de precios negociados por cliente, con un UNION ALL. Funcionaba en local y en producción devolvía cero filas, sin dar ningún error.

La causa era una diferencia de collation —la regla de comparación de texto— entre las dos tablas. Al unirlas, MySQL no comparaba las referencias como iguales aunque lo fueran. Y lo peor: no protestaba. Simplemente no encontraba nada.

Un fallo así no lo detecta ninguna capa de abstracción por encima. Se detecta sabiendo SQL y mirando la consulta.

Segundo caso, más común: un informe de ventas por cliente que se ejecutaba en catorce segundos. La consulta era correcta; lo que faltaba era un índice en la columna por la que se filtraba. Con el índice, cuarenta milisegundos.

Los cuatro comandos que hay que conocer

  • SELECT — leer. Es el 90 % de lo que se escribe.
  • INSERT — añadir filas.
  • UPDATE — modificar. Siempre con WHERE, salvo que quieras cambiar la tabla entera.
  • DELETE — borrar. Lo mismo, y con más motivo.

Y una costumbre que salva disgustos: antes de un UPDATE o un DELETE con condiciones complicadas, ejecuta primero el mismo WHERE con un SELECT y mira cuántas filas salen. Si el número te sorprende, no ejecutes el cambio.

Errores comunes

  • Concatenar variables dentro de la consulta. Es la puerta directa a una inyección SQL. Se usan consultas preparadas, siempre y sin excepciones.
  • SELECT * en producción. Traes columnas que no necesitas, y si mañana alguien añade una columna grande, tu consulta engorda sin que la toques.
  • Confundir WHERE y HAVING.
  • El problema N+1. Consultar una lista y luego hacer una consulta por cada elemento. Cien filas se convierten en ciento una consultas. Se resuelve con un JOIN.
  • LEFT JOIN con condición en el WHERE. Si filtras por una columna de la tabla derecha en el WHERE, conviertes silenciosamente tu LEFT JOIN en un INNER JOIN.
  • No mirar el plan de ejecución. EXPLAIN delante de una consulta lenta te dice exactamente qué está haciendo el motor.

Cuándo aprenderlo

Cuanto antes, y aunque no seas programador. Si trabajas con datos de una empresa, saber SQL te da autonomía: dejas de pedir informes y empiezas a sacarlos.

Un ORM no te libra de esto. Te ahorra escribir las consultas fáciles y, cuando algo va lento o devuelve algo raro, tienes que bajar al SQL que generó. Sin entenderlo, estás a ciegas.

Referencias

Tagsprogramacionbases-datosbackendfundamentos
Escrito por
Antonio Echeverría

Dirijo IMDICA, una empresa de suministro industrial, desde 2007. Escribo estas definiciones desde el lado de quien las usa para decidir, no desde el de quien las estudia.

Si necesitas que alguien construya esto de verdad y no solo lo explique, eso es lo que hago en AE Works.