Álgebra relacional
Seis operaciones sobre conjuntos que producen conjuntos. Es el lenguaje en el que el motor piensa una consulta, y entenderlo es lo que permite leer un plan de ejecución.
Para este tema conviene tener claro:Tablas, claves e integridad referencial
SQL se parece al inglés y por eso se aprende de memoria. Debajo hay algo bastante más chico: un álgebra con seis operaciones básicas donde cada una toma relaciones y devuelve una relación. El motor traduce la consulta a esas operaciones, y ahí es donde decide cómo ejecutarla.
Por qué las operaciones se encadenan
La propiedad que lo hace funcionar es la cerradura: toda operación devuelve una relación, así que se pueden componer sin límite. La salida de una es la entrada de la siguiente.
Eso es lo que permite anidar subconsultas y encadenar vistas: no hay un tipo intermedio distinto,
siempre es una relación. Y como una relación es un conjunto, no hay orden ni filas repetidas —una
diferencia con SQL, que trabaja con multiconjuntos y sí admite duplicados salvo que se pida
DISTINCT—.
Antes de seguir, predecí
Cortar a lo ancho y a lo largo
Las dos operaciones unarias se corresponden con las dos formas de recortar una tabla. La
selección elige filas que cumplen una condición: es el WHERE, y corta
horizontalmente.
La proyección elige columnas: es la lista del SELECT, y corta verticalmente. Un detalle
que se olvida: en el álgebra, proyectar elimina duplicados, porque el resultado es un conjunto.
La tabla de empleados, entera.
Las que combinan dos relaciones
De las binarias, tres son de teoría de conjuntos y requieren esquemas compatibles: unión,
diferencia e intersección. La diferencia es la que más se subestima: es la única forma de expresar
“los que están acá y no allá”, y es la base del NOT EXISTS.
Las otras dos combinan tablas distintas. El producto cartesiano empareja cada fila con cada fila, y el join es un producto seguido de una selección: emparejar sólo donde la condición se cumple. El join no es primitivo, es una abreviatura, y sin embargo es la operación central de todo el modelo.
Lo que se construye con las seis básicas
Con esas seis se construye el resto. La división responde consultas del tipo “los que se relacionan con todos” —los alumnos que aprobaron todas las materias— y se expresa con diferencias y productos, aunque cueste leerla.
La renombración permite hacer join de una tabla consigo misma, que es lo que hace falta para comparar filas entre sí: empleados que ganan más que su jefe, por ejemplo. Y las agregaciones y los valores nulos quedan fuera del álgebra clásica: son extensiones que SQL agregó por necesidad práctica.
Las equivalencias que usa el optimizador
Acá está la razón por la que esto importa fuera de la teoría. El álgebra tiene equivalencias: dos expresiones distintas que siempre dan el mismo resultado. Eso es lo que habilita al optimizador a reescribir la consulta.
La regla más rentable es empujar las selecciones hacia abajo: filtrar antes de hacer el join, no
después. Si una tabla de un millón de filas se reduce a cien antes de combinarla, el join trabaja
sobre cien. Esa reescritura es automática, y es por eso que WHERE y ON suelen dar el mismo plan
en un inner join —pero no en un outer, donde el orden cambia el resultado—.
Por qué SQL describe el qué y no el cómo
La consecuencia es la que define el trabajo con bases relacionales: SQL es declarativo. Se describe qué se quiere, no cómo obtenerlo, y el motor elige el plan usando estadísticas de los datos.
Por eso una consulta puede volverse lenta sin que su texto cambie: cambiaron los datos, o las estadísticas quedaron desactualizadas. Leer un plan de ejecución es leer un árbol de operaciones del álgebra, con la implementación concreta de cada una —recorrido secuencial, búsqueda por índice, hash join— anotada en cada nodo.
Por qué sirve saberla
| Operación | En SQL | Detalle que cambia |
|---|---|---|
| Selección σ | WHERE | igual |
| Proyección π | SELECT columnas | el álgebra elimina duplicados; SQL no, salvo DISTINCT |
| Unión ∪ | UNION | UNION elimina duplicados; UNION ALL no, y es más barato |
| Producto × | CROSS JOIN | igual |
| Join ⋈ | JOIN ... ON | igual |
| Diferencia − | EXCEPT | igual |
La utilidad práctica del álgebra no es escribirla: es que el optimizador del motor razona con ella. Cuando reescribe una consulta, lo que hace es aplicar equivalencias algebraicas —empujar una selección antes de un join, reordenar joins, eliminar una proyección redundante— sabiendo que el resultado no cambia.
Cierre
Selección, proyección, unión, diferencia, producto y renombración: con eso se expresa toda consulta relacional, y el join es producto más selección. Las equivalencias entre expresiones son lo que permite optimizar, y son la razón de que SQL diga qué y no cómo.
Autoevaluación
¿Lo entendiste?
Práctica