Der er flere måder at håndtere manglende rækker på, men alle handler om at have et andet sæt data at kombinere med dine nuværende resultater.
Det kunne være afledt af dine resultater, skabt af en CTE eller anden proces (såsom dit eksempel), eller (min præference) ved at bruge en permanent skabelon at slutte sig til.
Skabelonen i dit tilfælde kunne bare være en tabel med datoer, som din @datesTBL. Forskellen er, at den er lavet på forhånd med f.eks. 100 års datoer.
Din forespørgsel kan så ligne dit eksempel, men jeg ville prøve følgende...
SELECT
dt.tempDate ,
InstructorID, EventStart,
EventEnd, cancelled,
cancelledInstructor,
EventType, DevName,
Room, SimLocation,
ClassLocation, Event,
Duration, TrainingDesc,
Crew, Notes,
LastAmended, InstLastAmended,
ChangeAcknowledged, Type,
OtherType, OtherTypeDesc,
CourseType
FROM
@datesTBL dt
LEFT OUTER JOIN
OpsInstructorEventsView iv
ON iv.EventStart >= dt.tempDate
AND iv.EventStart < dt.tempDate + 1
AND iv.InstructorID = @InstructorID
WHERE
dt.tempDate >= @StartDate
AND dt.tempDate <= @EndDate
ORDER BY
dt.tempDate,
iv.EventStart
Dette sætter kalenderskabelonen til VENSTRE, og det gør mange forespørgsler nemmere, da du ved, at kalenderens datofelt altid er udfyldt, altid kun er en datoværdi (ingen tidsdel), er i orden, er enkel at GRUPPE EFTER osv.