the semantic purpose of the HAVING clause is to filter the grouped aggregate rows produced by the GROUP BY clause if there is no GROUP BY clause, where is the aggregation taking place? technically, the entire result set forms a single group it might be valid, but semantically, i dasn't like it at all