A mi me parece una sentencia perfectamente válida.... eso si, no se si Access la soportará.
Para aclarar a
kenkatana que parece que se nos ha perdido en el camino, la sentencia inserta en la tabla factura todas las filas que son resultado del Select que le sigue, lo que está basado en el estándar SQL.
Luego, para ejecutar una sentencia de este tipo, que no devuelve un cursor, regularmente no se "abre" el query, sino se ejecuta.
En la jerga del BDE, no se hace query1.Open, sino query1.ExecSQL (si no mal recuerdo).
Si usas otros componentes de acceso, como ADO, pues habrá de ver de que componente específico se trata para ver cual es el método a seguir, aunque lo usual sería utilizar un TADOCommand.
Saludos.
