WHERE clause not preventing return of row but changing values for aggregate function (here: count)
This is standard SQL behaviour for pretty much all databases.

There are three ways how rows are returned:


without aggregate functions, the query returns one row per row;
with aggregate functions, but without grouping, the query returns exactly one row;
with aggregate functions and grouping, the query returns one row for each group (i.e., for each unique combination of values in the grouped columns).


In other words, aggregating without grouping behaves as if there is a single group, i.e., as if you had written GROUP BY () (a GROUP BY clause with an empty list results in a single group 'from nowhere', similar to how a query without FROM results in a single row 'from nowhere').

To prevent returning this single-group row, you can


add an explicit GROUP BY, so that you end up in case 3. above (after the WHERE has filtered out all rows, there is no value from which a group could be created):

SELECT 
   'something confidential',
   count(CURRENT_DATE)
WHERE FALSE
GROUP BY 1;  -- refers to the first column

move the aggregation into a subquery, so that the permission check affects the output of that:

SELECT *
FROM (SELECT
          'something confidential',
          count(CURRENT_DATE)
     ) AS subquery
WHERE FALSE;

move the permission check into the HAVING clause (if this is possible), so that the output for the single group is thrown away:

SELECT 
   'something confidential',
   count(CURRENT_DATE)
HAVING FALSE;