La razón es:"La consulta se ejecuta si se pasa la devolución de llamada; de lo contrario, se devuelve un objeto de consulta". (debajo de la sección de devoluciones)
.then()
no es realmente una promesa, está disfrazada de mangosta pero actúa como una ejecución.
Puede verlo ejecutar consultas aquí
.exec()
de la documentación
"Ejecuta la consulta" y devuelve una Promesa (verdadera)