There is a significant difference between DISTINCT and GROUP BY. In simple queries they might be the same, although of course, GROUP BY allows aggregates.
But as well as this, DISTINCT will work out every field before doing the DISTINCT, even if they are deterministic uses of the same field (eg, StartDate and DATEADD(day,1,StartDate) - check the Execution Plan, you'll see that the DATEADD is done BEFORE the DISTINCT. So GROUP BY is almost always better.
But... it's worth bearing in mind that as soon as GROUP BY includes something which has a Unique Index on it (such as the Primary Key), any other items from that table are ignored. After all, you can't get any more unique by including other fields in the GROUP BY clause.
So why not take an approach of:
GROUP BY t.id, u.id
/* All these other fields are ignored but here because they're
in the HAVING/SELECT/ORDER BY clauses
*/
, t.TransactionValue, u.Username, ....
I get that you're still having to type it all out, and it would be nice to have GROUP BY t.*
, but if you want, you could let Microsoft know by voting at https://connect.microsoft.com/SQLServer/feedback/ViewFeedback.aspx?FeedbackID=124654