С HQL вы работаете на уровне домена на основе классов, а SQL - на уровне реляционной модели. С HQL вы можете просматривать модель вашего домена в запросах и SQL, вам нужно создавать ссылки с объединениями и более подробными условиями объединения.
Кроме того, проекции с HQL проще, поскольку вы получаете объекты напрямую, тогда как с помощью SQL вы можете получать табличные представления ваших реляционных данных.
Оптимизация HQL более сложна, так как вам нужно работать на многих уровнях (уровень домена, Hibernate, сгенерированный SQL, реляционная модель), но в основном вы можете управлять меньшим количеством кода.
Результаты SQL не являются типобезопасными, но в контексте Grails это не так важно, как в контексте Java.