I got this info so just thought would put it here for my reference and for yours.
Of course, you can still obtain a list of all tables in the database
by executing the following: select * from sysobjects where type = 'U'.
However, there are some major differences between the TABLES view and
sysobjects:
The TABLES view only displays tables on which the user has
permissions. It is a useful way of allowing users to see only what
they are supposed to know about.
The TABLES view is part of a standard. The sysobjects table is not
guaranteed to stay the same.
However, this does not mean that you will never use the sysobjects
table anymore. In fact, my previous select from sysobjects points out
a crucial difference. By using the "where type = 'U'," I eliminate all
system tables from the list. There is no way to differentiate between
system tables and user tables in the TABLES view. (However, in the
TABLES view, system tables such as sysobjects are listed with a
TABLE_TYPE of view. Perhaps at some point system tables will be under
a separate owner rather than dbo.)
But first, we should ask the question, "What's wrong with pulling information from sysobjects and other system tables?" Well, the standard answer is Microsoft says not to do so. Microsoft reserves the right to change any and all system tables.