Query object is fundamentally a wrapper around our SQL/HQL query. Also it has various methods to sustitute values inside the actual query we've written.
Check the methods which are available in the query object. It's not just session.createQuery("SQL_QUERY").list() you can do.
There are lot of jdbc specific functions available.
List on the other hand just fires the query and gives you a collection object.