Denodo applies that transformation when it does not push down the SQL to the sources. However it leaves the SQL "as is" when it's pushed down, as that is usually done by the database optimizer.
If you want to enforce a particular SQL, you have to options:
a) Use "Create Base View from Query" to define the view. To have a more generic view, you can take advantage of the ExecuteIfIsNotNull option, for example
SELECT t0.col1 as col1, t0.col2 as col2, sum( t0.col3) AS col4
FROM BV t0
GROUP BY t0.col1, t0.col2
You can find more information about ExecuteIfIsNotNull and WHEREEXPRESSION in the Adminisrtator Guide, section 126.96.36.199.1 Using the WHEREEXPRESSION Variable
b) If you prefer not to use base view from query (for example to preserve the lineage), you can use "view parameters" in the "Model" tab of the definition of the derived view, and then a WHERE clause that uses that parameter. However, this will force you to specify a value for that input field, so it will be less generic than a)