Estructura · trabajo intermedio

Tablas temporales en SQL: CREATE TEMP y TEMPORARY TABLE

Guarda resultados intermedios durante una sesión o conexión cuando necesitas reutilizarlos en varias sentencias sin convertirlos en datos permanentes.

Lectura: 6–8 minSQL comprobadoPráctica con pistas
Contenido de esta guía

Respuesta rápida

Una tabla temporal es una tabla de trabajo cuya vida está limitada por el contexto del motor, normalmente la sesión o conexión. Sirve para guardar un resultado intermedio y reutilizarlo en varias sentencias sin crear una tabla permanente del modelo de negocio.

Patrón común
CREATE TEMP TABLE pedidos_grandes AS
SELECT id, cliente_id, total
FROM pedidos
WHERE total >= 200;

TEMP y TEMPORARY están soportados por varios motores, pero el alcance exacto, el esquema temporal y el comportamiento al hacer COMMIT no son idénticos.

Modelo mental: una mesa de trabajo de la sesión

Una CTE organiza una sentencia. Una tabla permanente forma parte del modelo persistente. La tabla temporal queda en medio: materializa datos para reutilizarlos durante un trabajo corto y luego desaparece según las reglas del motor.

Pregunta útil: si el resultado solo se usa una vez, una CTE o subconsulta suele ser más simple. Si necesitas leer, transformar o indexar el mismo conjunto en varias sentencias, una tabla temporal puede ser más clara.

Ejemplo comprobado: reutilizar pedidos grandes

SQLite 3.46.1 · comprobado
CREATE TEMP TABLE pedidos_grandes AS
SELECT id, cliente_id, total
FROM pedidos
WHERE total >= 200;

SELECT COUNT(*) AS pedidos,
       ROUND(SUM(total), 2) AS importe
FROM pedidos_grandes;
Resultado comprobado con la base educativa
pedidosimporte
52788,90

La primera sentencia materializa cinco filas en la tabla temporal. La segunda trabaja sobre ese conjunto sin repetir el filtro original.

Qué cambia entre motores

Alcance resumido de tablas temporales
MotorFormaVida típica
PostgreSQLCREATE TEMP TABLESe elimina al terminar la sesión; ON COMMIT permite conservar filas, vaciarlas o eliminar la tabla al terminar la transacción.
MySQLCREATE TEMPORARY TABLEVisible solo en la sesión actual y eliminada automáticamente al cerrarla.
SQLiteCREATE TEMP TABLESe crea en la base temporal asociada a la conexión.

Por estas diferencias, evita escribir una única regla universal sobre el momento exacto de borrado. Comprueba siempre el motor y, en PostgreSQL, si existe una cláusula ON COMMIT.

Tabla temporal vs CTE vs CTAS permanente

Qué herramienta encaja mejor
OpciónAlcanceÚsala cuando
CTEUna sentenciaQuieres organizar una consulta sin reutilizar el resultado en sentencias posteriores.
Tabla temporalSesión/conexión o transacción, según motorNecesitas varias operaciones sobre el mismo conjunto intermedio.
CTAS permanenteHasta que la tabla se elimineEl resultado debe persistir como objeto normal después de la sesión.

Errores frecuentes

Usar una temporal para una sola lectura trivial

Crear, poblar y eliminar una tabla añade pasos. Si una CTE resuelve la intención de forma clara dentro de una sola sentencia, suele ser una opción más simple.

Suponer que todas duran hasta el mismo momento

PostgreSQL permite controlar el comportamiento en COMMIT; MySQL documenta alcance de sesión; SQLite coloca la tabla en su base temporal. El ciclo de vida es dependiente del motor.

Olvidar que materializas datos

Si cambian las tablas de origen, una tabla temporal ya poblada no se actualiza mágicamente. Debes volver a cargarla si necesitas reflejar datos nuevos.

Práctica guiada

Intermedia · dos sentencias

Materializa clientes con pedidos

Crea una tabla temporal clientes_con_pedidos con los cliente_id distintos presentes en pedidos. Después cuenta cuántos clientes contiene.

Criterio de éxito: el conteo final es 10.

Qué debes recordar

  • Una tabla temporal sirve para resultados intermedios reutilizables.
  • Su ciclo de vida depende del motor.
  • Una CTE suele ser más simple cuando todo cabe en una única sentencia.
  • CREATE TEMP TABLE ... AS SELECT combina temporalidad y materialización.
  • Los datos materializados no se sincronizan automáticamente con las tablas de origen.

Conceptos relacionados

Fuentes técnicas consultadas