I'm usually giving each table a unique prefix. So your example would be something like
CREATE TABLE Products
(
PROD_ID int NOT NULL IDENTITY(1,1) PRIMARY KEY,
PROD_CAT_ID int NOT NULL FOREIGN KEY REFERENCES Categories(CAT_ID),
PROD_NAME varchar(200) NOT NULL
)
This makes joining and selecting columns easier, because you have no name conflicts. Unless you reference the same table more than once you will not even need table name aliases (most likely).
However lately I'm starting to thing that (2) might be better, because it's closer to the naming conventions I'm using when writing code (C# in my case).