There are 2 queries below that are identical except for the JOIN to mjnEmployeeDepartment. The first query uses LEFT OUTER JOIN and the second uses INNER JOIN. They both return the same data but the INNER JOIN takes 4.5 minutes to execute whereas the LEFT OUTER JOIN takes 4 seconds. Can anyone suggest what might be happening here?
I am running the code in SMS 2017 against a SQL 2012 database.
Select
Count(*) --23878 00:00:00
From
       dbo.mjnEmployee as e
              Inner Join dbo.mjnEmployeeStatus as s
                     on e.EmployeeID = s.EmployeeID
              Inner Join dbo.mjnEmployeeEmploymentInfo as RankNo
                     On e.EmployeeId = RankNo.EmployeeID
              Inner Join dbo.mjnEmployeeOfficeAssociation as Office
                     On e.EmployeeId = Office.EmployeeID
              Inner Join dbo.mjnEmployeeEmploymentInfo as TrackNo
                     On e.EmployeeId = TrackNo.EmployeeID
              Inner Join dbo.mjnEmployeeUnit as Unit
                     on e.EmployeeID = Unit.EmployeeID
                     And Unit.Iteration = 1
              Left Outer Join dbo.mjnEmployeeDepartment as Department
                     on e.EmployeeID = Department.EmployeeID
              Left Outer Join dbo.mjnEmployeeAssociation as Supervisor
                     On  e.EmployeeId = Supervisor.ObjectEmployeeId
                     and Supervisor.EmployeeAssociationType = 2
              Left Outer Join dbo.mjnEmployeeAssociation as Manager
                     On Manager.ObjectEmployeeId = e.EmployeeId
                     and Manager.EmployeeAssociationType = 1
              Left Outer Join dbo.mjnEmployeeAssociation as Assistant
                     On  e.EmployeeId = Assistant.ObjectEmployeeId
                     and Assistant.EmployeeAssociationType = 3
              Left Outer Join dbo.mjnEmployeeAssociation as Advisor
                     On e.EmployeeId = Advisor.ObjectEmployeeId
                     and Advisor.EmployeeAssociationType = 4
Select
Count(*) --23878 00:04:37
From
       dbo.mjnEmployee as e
              Inner Join dbo.mjnEmployeeStatus as s
                     on e.EmployeeID = s.EmployeeID
              Inner Join dbo.mjnEmployeeEmploymentInfo as RankNo
                     On e.EmployeeId = RankNo.EmployeeID
              Inner Join dbo.mjnEmployeeOfficeAssociation as Office
                     On e.EmployeeId = Office.EmployeeID
              Inner Join dbo.mjnEmployeeEmploymentInfo as TrackNo
                     On e.EmployeeId = TrackNo.EmployeeID
              Inner Join dbo.mjnEmployeeUnit as Unit
                     on e.EmployeeID = Unit.EmployeeID
                     And Unit.Iteration = 1
              Inner Join dbo.mjnEmployeeDepartment as Department
                     on e.EmployeeID = Department.EmployeeID
              Left Outer Join dbo.mjnEmployeeAssociation as Supervisor
                     On  e.EmployeeId = Supervisor.ObjectEmployeeId
                     and Supervisor.EmployeeAssociationType = 2
              Left Outer Join dbo.mjnEmployeeAssociation as Manager
                     On Manager.ObjectEmployeeId = e.EmployeeId
                     and Manager.EmployeeAssociationType = 1
              Left Outer Join dbo.mjnEmployeeAssociation as Assistant
                     On  e.EmployeeId = Assistant.ObjectEmployeeId
                     and Assistant.EmployeeAssociationType = 3
              Left Outer Join dbo.mjnEmployeeAssociation as Advisor
                     On e.EmployeeId = Advisor.ObjectEmployeeId
                     and Advisor.EmployeeAssociationType = 4
 
     
     
    