3 versions of SQL query to find students with simultaneous classes
They are all messy.   And please don't use old style joins.  

Two is the least messy as it goes at it more directly.  

But you can do it with joins   

select st.sname, cl.meets_at 
from Student st 
join Enrolled en 
  on en.snum = st.snum
join Class cl 
  on cl.cname = en.cname 
group by st.sname, cl.meets_at 
having count(*) &gt; 1 


That will return more than one row per sname if they have more than one class that has overlapping times.  But that is the most direct approach to the logic (in my opinion).

This would be a clean way to go at single sname

select st.sname 
from Student st 
where exists ( select 1  
               from Enrolled en     
               join Class cl 
                 on cl.cname = en.cname 
               where en.snun = st.snum
               group by cl.meets_at
               having count(*) &gt; 1 
             ) 


another - this might be the best efficiency 

select st.sname 
from Student st 
join  ( select cl.snum  
        from Enrolled en     
        join Class cl 
          on cl.cname = en.cname 
        group by cl.snum 
        having count(*) &gt; 1 
      ) cl2 
 on st.snum = cl.snum