Det finns flera sätt att hantera saknade rader, men alla handlar om att ha en annan uppsättning data att kombinera med dina nuvarande resultat.
Det kan härledas från dina resultat, skapade av en CTE eller annan process (som ditt exempel), eller (min preferens) genom att använda en permanent mall att gå med mot.
Mallen i ditt fall kan bara vara en tabell över datum, som din @datesTBL. Skillnaden är att den är skapad i förväg med till exempel 100 års datum.
Din fråga kan då likna ditt exempel, men jag skulle försöka med följande...
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
Detta sätter kalendermallen till VÄNSTER, och så gör det många frågor enklare eftersom du vet att kalenderns datumfält alltid är ifyllt, är alltid ett endast datumvärde (ingen tidsdel), är i ordning, är enkelt att GRUPPA EFTER, etc.