Using QGIS, rendering from a view takes significantly longer than rendering the same data from the source table. The view is just a select all from source table. The database is SQL Server 2012.
I believe that the underlying query (used to make the view) will be executed every time you try to access the view, where if you are just using the source table the select will much simpler.
This previous answer and the others on the thread support my reasoning: https://stackoverflow.com/a/7755497/5982697
I know there is a "materialized view" option that I have used in postgres, which basically creates a new table from the query that defines the view. If there is a similar option in SQL server 2012, maybe that would fast enough. However, you will have to refresh the materialized view when rows change in the source table.
I've noticed the same thing on spatial views that return a large amount of data in PostgreSql and it is caused by QGIS issuing a
SELECT count(distinct (id))=count((id)) FROM schema.view to verify the key that is defined for the layer is unique. I assume for an actual table, it checks for the database constraint, trusts it, and moves on.
Same thing probably is probably occurring in SQL Server--you could verify it with SQL Server Profiler.