Нет соединения между tblcourse tc, tblusereg ur. Таким образом, вы получаете перекрестное соединение, несмотря на IN (который фактически является JOIN)
DISTINCT работает и для всей строки: ни для одного столбца.
Примечание: вы упоминаете dbo.UserCourse дважды, но используете разные имена столбцов courseid и [course-id]
Переписано с СОЕДИНЕНИЯМИ.
select distinct
tc.coursename, ur.username, uc.[date], 'Paid' as [Status]
from
dbo.tblcourse tc
JOIN
dbo.tblusereg ur ON tc.courseid = ur.[course-id]
JOIN
dbo.UserCourse uc ON ur.[course-id] = uc.[course-id]
where
ur.userid=@userid
and
uc.[date] is not null
Это может решить вашу проблему ...