What you see is normal. Criteria queries are transformed to SQL queries executed using prepared statements. The id is a parameter of the statement.
If you want to select restaurants whose ID is in the subquery, then you need
criteria.add(Subqueries.propertyIn("id", innerIDs));
As the javadoc indicates, in()
considers the first argument as a literal value:
Creates a criterion which checks that the value of a literal is IN the values in the subquery result.