En casi cualquier base de datos hay consultas que se escriben una y otra vez: el mismo JOIN entre tres tablas, el mismo cálculo de promedios, el mismo filtro para mostrar solo los registros activos. Repetir ese código es incómodo y peligroso, porque si cambia una regla hay que corregirla en muchos sitios. Las vistas (views) existen para resolver ese problema. En este artículo verás qué son, cómo se crean, para qué sirven y qué precauciones conviene tener.
¿Qué es una vista?
Una vista es una consulta SELECT guardada en la base de datos con un nombre propio. Una vez creada, se puede consultar como si fuera una tabla: admite WHERE, ORDER BY, JOINs con otras tablas, etc.
La diferencia fundamental es que una vista normal no almacena datos. Solo guarda la definición de la consulta. Cada vez que alguien la consulta, el motor de base de datos ejecuta esa definición y devuelve los datos actuales de las tablas originales. Por eso se suele decir que una vista es una “tabla virtual”.
Un ejemplo práctico
Imagina la base de datos de un instituto con tres tablas: estudiantes, cursos y matriculas (que relaciona estudiantes con cursos y guarda la nota final). Para ver un listado legible de notas habría que escribir:
SELECT e.nombre, e.apellido, c.titulo AS curso, m.nota_final
FROM matriculas m
JOIN estudiantes e ON e.id = m.estudiante_id
JOIN cursos c ON c.id = m.curso_id;
Con una vista, esa consulta se guarda una sola vez:
CREATE VIEW v_notas_estudiantes AS
SELECT e.nombre, e.apellido, c.titulo AS curso, m.nota_final
FROM matriculas m
JOIN estudiantes e ON e.id = m.estudiante_id
JOIN cursos c ON c.id = m.curso_id;
Y a partir de ahí cualquiera puede escribir algo tan simple como:
SELECT nombre, apellido, nota_final
FROM v_notas_estudiantes
WHERE curso = 'Matemáticas I'
ORDER BY nota_final DESC;
Vistas con cálculos y agrupaciones
Las vistas también pueden contener funciones de agregación. Por ejemplo, un resumen por curso:
CREATE VIEW v_resumen_cursos AS
SELECT c.titulo AS curso,
COUNT(m.estudiante_id) AS total_matriculados,
AVG(m.nota_final) AS nota_media
FROM cursos c
LEFT JOIN matriculas m ON m.curso_id = c.id
GROUP BY c.titulo;
Así, la dirección del instituto puede consultar v_resumen_cursos sin saber nada de JOINs ni de GROUP BY.
Ventajas de usar vistas
- Simplicidad: esconden la complejidad de consultas largas detrás de un nombre claro.
- Reutilización y coherencia: la lógica se define una vez. Si cambia, por ejemplo, la forma de calcular la nota media, se modifica solo la vista.
- Seguridad: se puede dar permiso de lectura sobre la vista sin dar acceso a las tablas. Así se ocultan columnas sensibles, como datos personales o de pago.
- Independencia de la estructura: si las tablas se reorganizan, una vista puede mantener el “formato antiguo” para que informes y aplicaciones sigan funcionando.
Un ejemplo de permisos en SQL estándar sería:
GRANT SELECT ON v_resumen_cursos TO rol_direccion;
Vistas normales y vistas materializadas
Algunos sistemas ofrecen además vistas materializadas, que sí guardan físicamente el resultado de la consulta. Son útiles para informes pesados, porque la lectura es mucho más rápida, pero sus datos no se actualizan solos: hay que refrescarlos.
| Aspecto | Vista normal | Vista materializada |
|---|---|---|
| ¿Guarda datos? | No, solo la consulta | Sí, una copia del resultado |
| ¿Datos siempre actualizados? | Sí | Solo tras refrescarla |
| Velocidad de lectura | La misma que la consulta original | Normalmente mucho mayor |
| Ocupa espacio en disco | Prácticamente no | Sí |
| Disponibilidad | Casi todos los motores | PostgreSQL y Oracle, entre otros; SQL Server usa “vistas indexadas”; MySQL no la tiene de forma nativa |
¿Se pueden modificar datos a través de una vista?
Depende de la vista. En general, las vistas basadas en una sola tabla, sin GROUP BY, sin DISTINCT y sin funciones de agregación, son actualizables: un INSERT, UPDATE o DELETE sobre ellas modifica la tabla de origen. Una vista como v_resumen_cursos, en cambio, es solo de lectura, porque no tiene sentido “actualizar una media”.
La opción WITH CHECK OPTION evita que, a través de la vista, se inserten o modifiquen filas que luego no cumplirían su condición WHERE. Las reglas concretas varían entre motores, así que conviene revisar la documentación del que uses.
Errores frecuentes y buenas prácticas
- Pensar que una vista acelera las consultas: una vista normal ejecuta la misma consulta de siempre. El rendimiento depende de los índices y del diseño de la consulta.
- Encadenar demasiadas vistas: vistas que usan vistas que usan otras vistas se vuelven difíciles de mantener y de optimizar.
- Usar
SELECT *: mejor listar las columnas de forma explícita para evitar sorpresas cuando cambie la tabla. - No documentar dependencias: borrar o renombrar una columna puede romper vistas que la usan.
- Nombres poco claros: un prefijo como
v_ovw_ayuda a distinguir vistas de tablas.
Para modificar una vista, muchos motores aceptan CREATE OR REPLACE VIEW o ALTER VIEW, y para eliminarla se usa DROP VIEW nombre_vista;.
Conclusión
Las vistas son una herramienta sencilla que aporta orden, seguridad y claridad a cualquier base de datos: convierten consultas complejas en tablas virtuales fáciles de usar y permiten controlar quién ve qué información. Saber cuándo usar una vista normal, cuándo una materializada y cuándo una vista puede actualizarse es un paso importante para trabajar con SQL de forma profesional. Si quieres profundizar en modelado, consultas y administración de datos, revisa los cursos gratuitos de bases de datos disponibles en Cursa.













