I can loop through the table produced by the following query
Select userid_fk as id, courseID_fk
inner join tbl_users
Select min(schDate) as min
Select userid_fk as id, courseID_fk from tbl_userCourse inner join tbl_users on user_id=userid_fk where courseID_fk=5 and exists ( Select * from tbl_schedule where tbl_schedule.userid_fk = tbl_userCourse.userid_fk and tbl_schedule.schDate>getDate() and tbl_schedule.courseID_fk=5 )
Exists returns true if the query between braces has at least one record, so
and exits (...) will "skip" those in which that subquery is empty.
As you see this query is quite readable as it resembles what you explained you want