Cuando una consulta se repite o se vuelve compleja, la base de datos ofrece dos formas de encapsularla. Una vista (view) es una consulta guardada bajo un nombre: la definís una vez y después la usás como si fuera una tabla. Si tenés una consulta con varios JOIN y filtros que necesitás una y otra vez, la convertís en vista ventas_del_mes y consultarla es tan simple como SELECT * FROM ventas_del_mes. La vista no guarda datos (salvo las «vistas materializadas»): es un atajo que ejecuta la consulta subyacente cada vez, simplificando y evitando repetir SQL complejo. Un procedimiento almacenado (stored procedure) va más allá: es un bloque de lógica —varias operaciones, con parámetros, condiciones y bucles— guardado dentro de la base de datos y ejecutable por su nombre. Sirve para encapsular operaciones complejas que involucran varios pasos. La diferencia: la vista encapsula una consulta (para leer); el procedimiento encapsula una lógica (para hacer). Ambos ayudan a reutilizar, simplificar y centralizar, pero conviene no abusar: meter toda la lógica de negocio en la base de datos la vuelve difícil de mantener y de versionar. La regla es usarlos para lo que de verdad gana estando cerca de los datos.
Ver índice de contenidos
Las vistas
Una vista es una consulta guardada con un nombre. Imaginá que necesitás a menudo «las ventas del mes actual, con el nombre del cliente y del vendedor» —una consulta con varios JOIN, filtros y quizá agregaciones—. En vez de reescribir ese SQL complejo cada vez, lo definís una sola vez como vista:
CREATE VIEW ventas_del_mes AS
SELECT clientes.nombre, pedidos.importe, pedidos.fecha
FROM pedidos
JOIN clientes ON pedidos.cliente_id = clientes.id
WHERE pedidos.fecha >= '2026-07-01';
-- Ahora consultarla es tan simple como leer una tabla:
SELECT * FROM ventas_del_mes;Una ventana, no una copia
La vista no guarda datos: es una «ventana» que ejecuta su consulta subyacente cada vez que la consultás, mostrando siempre datos actualizados. Su valor es simplificar (esconder la complejidad tras un nombre claro), reutilizar (definir la lógica una vez) y, a veces, controlar el acceso (exponer solo ciertas columnas). Existe una variante, la vista materializada, que sí guarda el resultado calculado para acelerar, a costa de tener que refrescarlo.
Los procedimientos almacenados
Un procedimiento almacenado va un paso más allá de la vista: en vez de guardar una consulta, guarda una lógica completa —un bloque de instrucciones que puede tener parámetros, condiciones, bucles y varias operaciones— dentro de la base de datos, ejecutable por su nombre.
-- Un procedimiento que encapsula una operación con parámetros (esquemático)
CREATE PROCEDURE registrar_pago(pedido INT, monto DECIMAL)
BEGIN
UPDATE pedidos SET pagado = pagado + monto WHERE id = pedido;
INSERT INTO movimientos (pedido_id, monto) VALUES (pedido, monto);
END;
-- Se ejecuta llamándolo por su nombre:
CALL registrar_pago(42, 100.00);La diferencia clave con la vista: la vista encapsula algo para leer (una consulta); el procedimiento encapsula algo para hacer (una operación, que a menudo modifica datos en varios pasos coordinados). El procedimiento centraliza una lógica que si no habría que repetir en cada aplicación que use la base de datos.
Cuándo usar cada uno
Ambos ayudan a reutilizar, simplificar y centralizar, pero tienen su lugar:
- Vista: cuando una consulta compleja o de lectura se repite. Le das un nombre claro y simplificás todo lo que la usa.
- Vista: para controlar el acceso, exponiendo solo un subconjunto de columnas o filas a ciertos usuarios.
- Procedimiento: cuando una operación de varios pasos debe hacerse siempre igual y conviene que viva junto a los datos (por rendimiento o por integridad).
La tentación de encapsular todo en procedimientos almacenados tiene un coste real. La lógica dentro de la base de datos es más difícil de versionar (no vive con tu código en el repositorio de la misma forma), de probar, de depurar y de migrar a otro motor. Por eso el consenso moderno es usar vistas y procedimientos para lo que de verdad se beneficia de estar cerca de los datos —consultas complejas reutilizables, operaciones que exigen integridad transaccional estrecha—, y mantener la lógica de negocio general en la aplicación, donde es más fácil de mantener. Es una cuestión de equilibrio, no de usarlos para todo ni de evitarlos por completo.
Errores frecuentes
- Repetir la misma consulta compleja por todas partes. Una vista la centraliza y evita divergencias.
- Creer que una vista guarda datos. Ejecuta su consulta cada vez; para guardar el resultado, vista materializada.
- Meter toda la lógica de negocio en procedimientos. Dificulta versionar, probar y migrar; equilibrar con la aplicación.
- Anidar vistas sobre vistas sin control. Puede degradar el rendimiento y volverse difícil de entender.
- Olvidar refrescar una vista materializada. Si no se refresca, muestra datos antiguos.
- No usar vistas para el control de acceso. Exponer solo ciertas columnas por vista es una técnica útil y desaprovechada.
- Depender de procedimientos específicos de un motor. Dificulta cambiar de base de datos; tenerlo en cuenta.
Preguntas frecuentes
¿Qué es una vista en SQL?
Una vista en SQL es una consulta guardada bajo un nombre, que a partir de entonces se puede utilizar como si fuera una tabla. Su propósito es encapsular y reutilizar consultas, especialmente aquellas que son complejas o que se repiten con frecuencia. La idea se entiende bien con un ejemplo: supongamos que a menudo se necesita obtener las ventas del mes actual junto con el nombre del cliente y del vendedor, lo que requiere una consulta con varias uniones entre tablas, filtros por fecha y quizá alguna agregación. En lugar de escribir esa consulta larga y complicada cada vez que se necesita, se define una sola vez como una vista con un nombre descriptivo, y a partir de ese momento obtener esos datos es tan sencillo como hacer una selección sobre el nombre de la vista, igual que si se consultara una tabla normal. Una característica importante que conviene entender es que una vista, en su forma habitual, no almacena datos por sí misma, sino que actúa como una ventana o un atajo: cada vez que se consulta la vista, la base de datos ejecuta por debajo la consulta que la define y devuelve resultados siempre actualizados a partir de las tablas reales subyacentes. Existe una variante llamada vista materializada que sí almacena físicamente el resultado calculado para acelerar el acceso, a cambio de tener que refrescarlo periódicamente para que no quede desactualizado. Las vistas aportan tres beneficios principales: simplifican, al ocultar la complejidad de una consulta tras un nombre claro; permiten reutilizar, al definir la lógica una sola vez y usarla en muchos sitios; y pueden servir para controlar el acceso, exponiendo a ciertos usuarios solo un subconjunto de columnas o filas.
¿Qué es un procedimiento almacenado?
Un procedimiento almacenado es un bloque de lógica guardado dentro de la propia base de datos, que puede contener varias operaciones y que se ejecuta invocándolo por su nombre. A diferencia de una consulta simple o de una vista, un procedimiento almacenado puede aceptar parámetros de entrada, contener estructuras de control como condiciones y bucles, realizar varias operaciones de forma coordinada, incluidas modificaciones de los datos, y devolver resultados. Es, en esencia, un pequeño programa que vive dentro de la base de datos y que encapsula una lógica concreta. Por ejemplo, un procedimiento podría encargarse de registrar el pago de un pedido, actualizando el importe pagado en la tabla de pedidos y registrando además un movimiento en una tabla de movimientos, todo en una sola operación invocable por su nombre con los parámetros correspondientes. La ventaja de los procedimientos almacenados es que permiten centralizar una lógica que, de otro modo, habría que repetir en cada aplicación o componente que accede a la base de datos, garantizando así que esa operación se realice siempre de la misma manera y en el lugar adecuado. También pueden ofrecer ventajas de rendimiento en ciertos casos, al ejecutarse cerca de los datos y evitar múltiples idas y vueltas entre la aplicación y la base de datos, y pueden contribuir a la integridad al agrupar operaciones que deben ocurrir juntas. La diferencia fundamental con una vista es que la vista encapsula una consulta orientada a leer y simplificar la obtención de datos, mientras que el procedimiento encapsula una lógica orientada a ejecutar operaciones, a menudo con varios pasos que modifican datos. Dicho esto, conviene usar los procedimientos con criterio y no volcar en ellos toda la lógica de una aplicación, por las dificultades de mantenimiento que ello acarrea.
¿Cuál es la diferencia entre una vista y un procedimiento?
La diferencia fundamental entre una vista y un procedimiento almacenado está en qué encapsula cada uno y para qué sirve. Una vista encapsula una consulta, es decir, está orientada a leer y a simplificar la obtención de datos: guarda bajo un nombre una consulta que puede ser compleja, y permite luego consultarla como si fuera una tabla, devolviendo un conjunto de resultados. Su naturaleza es esencialmente de lectura y de presentación de datos, actuando como una ventana sobre las tablas reales. Un procedimiento almacenado, en cambio, encapsula una lógica, es decir, está orientado a ejecutar operaciones: guarda un bloque de instrucciones que puede aceptar parámetros, incluir condiciones y bucles, y realizar varias acciones coordinadas, incluidas modificaciones de los datos. Su naturaleza es la de hacer cosas, no solo mostrarlas. Una forma sencilla de recordar la distinción es que la vista es para leer y el procedimiento es para hacer: si lo que se quiere es dar un nombre reutilizable a una consulta de la que se van a leer datos, se usa una vista; si lo que se quiere es encapsular una operación de varios pasos, especialmente si modifica datos, se usa un procedimiento. Hay también diferencias en cómo se usan: una vista se consulta con una selección, como una tabla, mientras que un procedimiento se ejecuta llamándolo por su nombre con sus parámetros. Ambos comparten el objetivo de reutilizar, simplificar y centralizar la lógica o las consultas dentro de la base de datos, evitando repetición, pero se aplican a necesidades distintas, la lectura simplificada en el caso de las vistas y la ejecución de operaciones en el de los procedimientos. Elegir el adecuado es cuestión de identificar si el objetivo es consultar o actuar.
¿Una vista mejora el rendimiento?
Una vista normal, por sí sola, no mejora directamente el rendimiento, y es importante entender por qué para no tener expectativas equivocadas. Una vista habitual no almacena datos, sino que es esencialmente un nombre para una consulta guardada, de modo que cada vez que se consulta la vista, la base de datos ejecuta por debajo la consulta que la define, con el mismo coste que tendría escribir esa consulta directamente. Por tanto, usar una vista en lugar de escribir la consulta a mano no hace que la operación sea más rápida; su beneficio está en la comodidad, la reutilización y la claridad, no en la velocidad. De hecho, un uso descuidado de las vistas, como anidar muchas vistas unas sobre otras, puede incluso complicar el trabajo del optimizador de consultas y perjudicar el rendimiento si no se tiene cuidado. Ahora bien, existe una variante llamada vista materializada que sí puede mejorar el rendimiento de forma significativa. A diferencia de la vista normal, la vista materializada almacena físicamente el resultado de la consulta en el momento en que se calcula, de modo que las consultas posteriores leen ese resultado ya calculado en lugar de recomputar la consulta cada vez, lo que puede ser mucho más rápido para consultas costosas que se ejecutan con frecuencia. El precio de esta ventaja es que el resultado almacenado puede quedar desactualizado a medida que cambian los datos subyacentes, por lo que hay que refrescar la vista materializada periódicamente para mantenerla al día, lo que implica un coste y una decisión sobre cada cuánto hacerlo. En resumen, las vistas normales aportan claridad y reutilización pero no velocidad, mientras que las vistas materializadas sí pueden acelerar consultas costosas a cambio de gestionar su actualización, y para acelerar consultas la herramienta más habitual y directa siguen siendo los índices bien diseñados.
¿Debo poner toda la lógica en procedimientos almacenados?
No, poner toda la lógica de una aplicación en procedimientos almacenados dentro de la base de datos no suele ser recomendable, y el consenso moderno se inclina por un enfoque equilibrado. Aunque los procedimientos almacenados tienen ventajas reales, como centralizar operaciones, garantizar que se ejecuten siempre igual, y a veces mejorar el rendimiento al estar cerca de los datos, también acarrean costes importantes si se abusa de ellos. La lógica que vive dentro de la base de datos es más difícil de gestionar en varios aspectos. Es más difícil de versionar, porque no se integra de forma natural con el control de versiones del código de la aplicación de la misma manera que el código normal, lo que complica seguir su historial y coordinar cambios. Es más difícil de probar, ya que las herramientas y prácticas de pruebas automatizadas están mucho más desarrolladas para el código de aplicación que para la lógica dentro de la base de datos. Es más difícil de depurar, porque las herramientas de depuración suelen ser más limitadas. Y ata la aplicación al motor de base de datos concreto, dificultando una eventual migración a otro, ya que los procedimientos suelen escribirse en lenguajes específicos de cada sistema. Por todo ello, la práctica recomendada es reservar las vistas y los procedimientos almacenados para aquello que se beneficia realmente de estar cerca de los datos, como consultas complejas y reutilizables o ciertas operaciones que requieren una integridad transaccional muy estrecha, y mantener la lógica de negocio general en la capa de la aplicación, donde es más fácil de mantener, probar, versionar y evolucionar. Se trata, en definitiva, de una cuestión de equilibrio: ni usar la base de datos para todo ni evitar por completo sus capacidades, sino elegir para cada pieza de lógica el lugar donde mejor encaja.
¿Las vistas sirven para controlar el acceso a los datos?
Sí, una de las utilidades valiosas y a menudo desaprovechadas de las vistas es el control de acceso a los datos, ya que permiten exponer a ciertos usuarios solo un subconjunto de la información, ocultando el resto. La idea es que, en lugar de dar a un usuario o a una aplicación acceso directo a una tabla completa con todas sus columnas y filas, se le da acceso a una vista definida de manera que muestre únicamente las columnas y las filas que esa parte debe ver, aplicando en la definición de la vista los filtros y la selección de columnas apropiados. Por ejemplo, si una tabla de empleados contiene tanto datos generales como información sensible relativa a salarios o datos personales, se puede crear una vista que exponga solo las columnas no sensibles, y conceder a determinados usuarios acceso a esa vista en lugar de a la tabla completa, de modo que nunca puedan ver la información reservada. Del mismo modo, se puede crear una vista que muestre solo las filas correspondientes a una región, un departamento o un cliente concreto, limitando así lo que cada usuario ve según su ámbito. Esta técnica combina el control de acceso con las demás ventajas de las vistas, como la simplificación y la reutilización, y encaja dentro del principio de mínimo privilegio, según el cual cada usuario debe tener acceso solo a lo estrictamente necesario para su función. Es importante tener en cuenta que el control de acceso mediante vistas suele complementarse con el sistema de permisos propio de la base de datos, que gestiona qué usuarios pueden acceder a qué objetos, y que ambos mecanismos trabajan juntos para proteger los datos. En conjunto, usar vistas para exponer versiones restringidas de los datos es una práctica útil y elegante que ayuda a proteger la información sensible sin renunciar a la comodidad de las consultas.
Fuentes
Documentación oficial y material de la comunidad consultados para esta guía. Fecha de consulta: 28 de julio de 2026.
Aportes de la comunidad Underc0de
- Underc0de, foro. Sección Bases de datos. SQL y lógica en la base de datos.
- Underc0de, blog. Blog de la comunidad. Artículos de datos.
Documentación oficial
- PostgreSQL. Views. Tutorial oficial de vistas.
- MySQL. Stored Programs and Views. Vistas y procedimientos.
- PostgreSQL. PL/pgSQL. Lenguaje para procedimientos.
- ISO/IEC. SQL (ISO/IEC 9075). El estándar del lenguaje.