Having clause is used only with group functions whereas Where is not used with.
Q: What's the difference between a primary key and a unique key?
A: Both primary key and unique enforce uniqueness of the column on which they are defined. But by default primary key creates a clustered index on the column, where are unique creates a nonclustered index by default. Another major difference is that, primary key doesn't allow NULLs, but unique key allows one NULL only.
Unique Key : unique values
Primary Key : Not Null + Unique + nonclustered index