When it comes to the catalog views there are several layers of security. Public membership is sufficient to query the view as such, but you need further permissions to see any actual data. Exactly what permissions depend on the view.
As one example run this in a database that has a couple of tables:
CREATE USER tillfällig WITHOUT LOGIN
CREATE TABLE tillfällig (a int NOT NULL)
GRANT SELECT ON tillfällig TO tillfällig
go
EXECUTE AS USER = 'tillfällig'
go
SELECT * FROM sys.tables
go
REVERT
go
DROP USER tillfällig
DROP TABLE tillfällig
The temporary user (tillfällig is Swedish for temporary) can only see the table tillfällig, not the other tables as it lacks permission to them.