Why is this select statement not returning what I've provided?
The WHERE clause returns the desired single row AssignSchedule but you have no correlation between that row and the outer Subject and Schedule tables so you get a Cartesian product of all Subject and Schedule combinations.  You could add the outer table correlations to your existing query to get the desired result:

SELECT  Subject.CourseCode
      , Schedule.Room
FROM    Subject
      , Schedule
      , AssignSchedule
WHERE   AssignSchedule.ScheduleID = ( SELECT    Schedule.ScheduleID
                                      FROM      Schedule
                                      WHERE     Room = 'Room1'
                                    )
        AND AssignSchedule.SubjectID = ( SELECT Subject.SubjectID
                                         FROM   Subject
                                         WHERE  CourseCode = 'SubjectA'
                                       )
        AND AssignSchedule.ScheduleID = Schedule.ScheduleID
        AND AssignSchedule.SubjectID = Subject.SubjectID;


A better approach would be use simple equality predicates instead in the ugly subqueries.  Below are examples using the old ANSI SQL-89 syntax you've been using as well as the ANSI SQL-92 equivalent.  I suggest the latter as it helps avoid missing join predicates.

SELECT  Subject.CourseCode
      , Schedule.Room
FROM    Subject
      , Schedule
      , AssignSchedule
WHERE
            AssignSchedule.ScheduleID = Schedule.ScheduleID
        AND AssignSchedule.SubjectID = Subject.SubjectID
        AND Schedule.Room = 'Room1'
        AND Subject.CourseCode = 'SubjectA';

SELECT  Subject.CourseCode
      , Schedule.Room
FROM    Subject
JOIN AssignSchedule ON AssignSchedule.SubjectID = Subject.SubjectID
JOIN Schedule ON AssignSchedule.ScheduleID = Schedule.ScheduleID
WHERE   
        Schedule.Room = 'Room1'
    AND Subject.CourseCode = 'SubjectA';