Antes de nada te comento que siempre que necesito acceder a datos (ya sea para mostrarlos en pantalla u operar con ellos aunque no los muestre) utilizo la segunda opción que nos mostrás. O sea, la de crear un objeto recordset. Cuando sólo tengo que insertar, modificar o eliminar registros; utilizo la primera.
Ahora si, yo creo (y es sólo una opinión) que usando la primer opción (el método execute del objeto connection sobre un SELECT) te devuelve un “objeto recordset virtual”. Es decir que no podrías acceder a métodos ni propiedades de este “objeto” ya que no existe realmente como tal (digamos que, por ejemplo, no podrías usar un Recordset.RecordCount)
Reitero que nunca usé la primer opción que nos comentás para acceder a datos... por ello no se si lo que estoy diciendo es correcto, pero algo me dice que si