Normalmente, todas las selecciones tienen la forma SELECT [columns, scalar computations on columns, grouped computations on columns, or scalar computations] FROM [table or joins of tables, etc]
Debido a que esto permite cálculos escalares simples, podemos hacer algo como SELECT 1 + 1 FROM SomeTable
y devolverá un conjunto de registros con el valor 2 para cada fila en la tabla SomeTable
.
Ahora, si no nos importa ninguna tabla, pero solo queremos hacer nuestro cálculo escalar, podríamos querer hacer algo como SELECT 1 + 1
. Esto no está permitido por el estándar, pero es útil y la mayoría de las bases de datos lo permiten (Oracle no lo permite a menos que haya cambiado recientemente, al menos antes).
Por lo tanto, estos SELECT simples se tratan como si tuvieran una cláusula from que especificara una tabla con una fila y sin columna (imposible, por supuesto, pero funciona). Por lo tanto SELECT 1 + 1
se convierte en SELECT 1 + 1 FROM ImaginaryTableWithOneRow
que devuelve una sola fila con una sola columna con el valor 2
.
En general, no pensamos en esto, simplemente nos acostumbramos al hecho de que los SELECT simples dan resultados y ni siquiera pensamos en el hecho de que debe haber algo de una fila seleccionado para devolver una fila.
Al hacer SELECT COUNT(*)
hiciste el equivalente a SELECT COUNT(*) FROM ImaginaryTableWithOneRow
que por supuesto devuelve 1.