Por el estándar:
SELECT 1 FROM r HAVING 1=1
medio
SELECT 1 FROM r GROUP BY () HAVING 1=1
Cita ISO / IEC 9075-2: 2011 7.10 Regla de sintaxis 1 (Parte de la definición de la cláusula HAVING):
Deja HCser el <having clause>. Deja que TEsea lo <table expression>que contiene de inmediato HC. Si TEno contiene inmediatamente a
<group by clause>, entonces " GROUP BY ()" está implícito. Sea Tel descriptor de la tabla definida por el <group by clause> GBCcontenido inmediato TEy Rsea el resultado de GBC.
Ok, eso está bastante claro.
Afirmación: 1=1es verdadera condición de búsqueda. No proporcionaré ninguna cita para esto.
Ahora
SELECT 1 FROM r GROUP BY () HAVING 1=1
es equivalente a
SELECT 1 FROM r GROUP BY ()
Cita ISO / IEC 9075-2: 2011 7.10 Regla general 1:
El <search condition>se evalúa para cada grupo de R. El resultado de la <having clause>es una tabla agrupada de aquellos grupos de R para los cuales el resultado de la
<search condition>es True.
Lógica: dado que la condición de búsqueda siempre es verdadera, el resultado es R, que es el resultado del grupo por expresión.
Lo siguiente es un extracto de las Reglas Generales de 7.9 (la definición del GRUPO POR CLÁUSULA)
1) Si no <where clause>se especifica no, entonces Tsea el resultado de lo anterior <from clause>; de lo contrario, Tsea el resultado de lo anterior <where clause>.
2) Caso:
a) Si no hay columnas de agrupación, el resultado de la <group by clause>tabla agrupada consiste Ten su único grupo.
Así podemos concluir que
FROM r GROUP BY ()
da como resultado una tabla agrupada, que consta de un grupo, con cero filas (ya que R está vacío).
Un extracto de las Reglas generales de 7.12, que define una Especificación de consulta (también conocida como una instrucción SELECT):
1) Caso:
a) Si Tno es una tabla agrupada, entonces [...]
b) Si Tes una tabla agrupada, entonces
Caso:
i) Si Ttiene 0 (cero) grupos, entonces deje que TEMP sea una tabla vacía.
ii) Si Ttiene uno o más grupos, cada uno <value expression>se aplica a cada grupo para obtener Tuna tabla TEMPde Mfilas, donde Mestá el número de grupos T. La icolumna -th de TEMP contiene los valores derivados de la evaluación de i-th <value expression>. [...]
2) Caso:
a) Si <set quantifier> DISTINCTno se especifica, entonces el resultado de la <query specification>es TEMP.
Por lo tanto, dado que la tabla tiene un grupo, debe tener una fila de resultados.
Así
SELECT 1 FROM r HAVING 1=1
debería devolver un conjunto de resultados de 1 fila.
QED
SELECT COUNT(*) FROM r;devuelve 1 fila (con0), mientras queSELECT COUNT(*) FROM r GROUP BY ();no devuelve ninguna fila.