Bom dia Roger!
Se inserirmos o count(m.id), que tem o alias numero_matriculas, a query não roda.
Query:
select c.nome, count(m.id) as numero_matriculas from curso c join matricula m on c.id = m.curso_id group by c.nome, numero_matriculas having numero_matriculas > 1;
Mensagem de erro:
ERROR 1056 (42000): Can't group on 'numero_matriculas'
Se você executar essa outra query:
select c.nome, count(m.id) as numero_matriculas from curso c join matricula m on c.id = m.curso_id group by c.nome having numero_matriculas > 1;
Vai retornar isso:
+----------------------+-------------------+
| nome | numero_matriculas |
+----------------------+-------------------+
| SQL e banco de dados | 2 |
+----------------------+-------------------+
1 row in set (0.00 sec)
A razão para isso é que você está fazendo uma agregação apenas nas matrículas. Caso você tivesse uma terceira tabela na consulta, e fizesse outra agregação (max, min, sum, avg, count), você teria duas colunas na cláusula group by.
Sacou?