Veja a resposta no link a seguir. Vai resolver seu problema:
Basicamente, você não pode excluir (modificar) a mesma tabela que você usa no SELECT. Existem maneiras de contornar isso documentadas nessa página.
O seguinte funcionará fazendo seu
select
aninhado uma mesa temporária. delete from TAB
where CourseName not in (select temp.CourseName
from (select t.CourseName
from TAB t
group by t.CourseName
having count(t.CourseName) > 100
) as temp
)