I might not be expressing this with the proper terminology but I believe the first works because RunSql uses the query 'engine' where such form references work. You can prove that by using form references in a test query. The latter method does not work the same way. .Execute is a method of Application.CurrentDb which uses ACE (formerly JET?) whereas RunSql is a method of the DoCmd object. If anyone has the exact skinny on this, please post it.
The more we hear silence, the more we begin to think about our value in this universe.
Paraphrase of Professor Brian Cox.