It seems to me that your database design (or the name of the 'id' column) is broken if you have non-unique ID's.
FALSE:
CREATE TABLE students
id PRIMARY KEY SERIAL
firstname TEXT
lastname TEXT
;
CREATE TABLE classes
id PRIMARY KEY SERIAL
name text
;
CREATE TABLE student_classes
studentid INT
classid INT
;
and now:
SELECT * FROM student_classes;
Will you get several instances of each id? Yes? Is the database design un-normalized? No. Conclusion. There are reasonable queries leading to multiple instances of certain fields by which one might want to collate results. In this case, I might want a hash keyed by student id and an array ref of all results with that student id. Call it "collation".