They are different things. A synonym is an alias for the object directly, a view is a construct over one or more tables.
Some reasons to use a view:
-
May need to filter, join or otherwise frig with the structure and semantics of the result set
-
May need to provide legacy support for an underlying structure that has changed but has dependencies that you do not want to re-work.
-
May provide security where some of the contents of the table should be visible to a class of users but not all. This could involve removing columns with sensitive information or filtering out a subset of the records.
-
May wish to encapsulate some business logic in a form that is accessible to users for reporting purposes.
-
You may wish to unify data from more than one source.
… Plus many more.
Reasons to use a synonym:
-
You may wish to alias an object in another database, where you can’t (or don’t want to) hard code the reference to the specific database.
-
You may wish to redirect to a source that changes over time, such as an archive table.
-
You want to alias something in a way that does not affect the query optimiser.
… Plus many more.