• What do you mean by "Avoid code that assumes all metadata is publicly visible"? As of SQL Server 2005 Microsoft is now recommending usage of the (documented) catalog views and dynamic management views for accessing metadata.

    And regarding the list of documented columns that return NULL or 0, well all of those columns are part of catalog views that exist only for backwards compatibility with the old system tables. For instance, instead of using sysindexes (which is actually called sys.sysindexes to be exact) you should use sys.indexes.