select * from people where id not in ( select id from class_registration )
In my experience, queries like the OUTER LEFT JOIN version posted earlier are usually much more efficient than NOT IN queries like the above. The planner seems to be pretty smart about turning (positive) IN queries into joins, but NOT IN queries usually turn into nested table scans, in my experience.
- John D. Burger MITRE