I'm trying to run a SELECT query using SQL Server, but I'm having trouble getting the desired results. I've tried utilising subqueries and joining in various orders, but nothing exactly works the way I want. Consider the fabricated example of software programs that may be installed on users' machines and have various version levels.
I have to do a JOIN with a WHERE, but I can't seem to get the outcomes I need. Maybe I'm interpreting my data incorrectly; I'm not entirely sure why I can't make this work.
Application table
ID  Name
1   Word
2   Excel
3   Powerpoint
Software Table (contains version information for different applications)
ID  ApplicationID   Version
1   1             2003
2   1             2007
3   2             2003
4   2             2007
5   3             2003
6   3             2007
Software_Computer junction table
ID  SoftwareID  ComputerID
1   1           1
2   4           1
3   2           2
4   5           2
Computer table
ID  ComputerName
1   Name1
2   Name2
I want a query that I could run where I select a specific computer to display what software version and application is has, but I also want it to display what application it does not have(the version would be a NULL since it doesn't have that software on it)
SELECT Computer.ComputerName, Application.Name, Software.Version
FROM Computer
JOIN Software_Computer
    ON Computer.ID = Software_Computer.ComputerID
JOIN Software
    ON Software_Computer.SoftwareID = Software.ID
RIGHT JOIN Application
    ON Application.ID = Software.ApplicationID
WHERE Computer.ID = 1 
I want the following result set
ComputerName   Name          Version
Name1          Word          2003
Name1          Excel         2007
Name1          Powerpoint    NULL
But I just get
Results
ComputerName   Name          Version
Name1          Word           2003
Name1          Excel          2007
I thought the RIGHT JOIN would include all the results in the application table, even if they aren't associated with the computer. What am I missing/doing wrong?