Oi Luiz!
Nesse caso você precisa inverter a ordem das origens de dados (Cursos join Alunos, em vez de Alunos join Cursos), uma vez que o LINQ suporta left outer join, mas não right outer join.
A query abaixo vai trazer todos os cursos sem nenhum aluno matriculado:
var CursosNaoRealizados =
from c in Cursos
join a in Alunos
on c.CursoId equals a.CursoId into juncao
from j in juncao.DefaultIfEmpty()
select c;
Entretanto, se você quiser trazer os cursos em que um determinado aluno não está matriculado, podemos filtrar os alunos com uma expressão lambda:
int meuAlunoId = 12345;
var CursosNaoRealizados =
from c in Cursos
join a in Alunos.Where(a => a.AlunoId == meuAlunoId)
on c.CursoId equals a.CursoId into juncao
from j in juncao.DefaultIfEmpty()
select c;