I typically just go for sys.objects like the following.
SELECT SCHEMA_NAME(schema_id) As SchemaName
,name As TableName
WHERE type = 'U'
An interesting sidebar on this is that if you look at the execution plan, the version going to sys.tables will get it's data from sysschobjs and sysidxstats and will cost a little bit more than just going direct to sys.objects (for which sysschobjs is the base object).
I have given a name to my pain...MCM SQL Server, MVP
Posting Performance Based Questions - Gail Shaw[/url]
Learn Extended Events