If you omit a Criteria in your DLookup Function, as you've done, Access only returns a random value, usually the value from the first Record in the Table, as it is doing for you, here. If you want to use DLookup, change your ID_de_cliente_AfterUpdate event to this:
Code:
Private Sub ID_de_cliente_AfterUpdate()
Me.Correo = DLookup("[Correo electronico]", "[Listado de clientes]", "[ID de cliente] = " & Me.[ID de cliente])
End Sub
and it will work as you want it to.
And a word to the wise, in the future do not use Spaces in the names of Objects/Fields/Controls. Doing so requires extra work, which is often not done, and can lead to problems down the road. Better to use something like Listado_de_clientes or ListadoDeClientes.
Linq ;0)>
The problem with making anything foolproof...is that fools are so darn ingenious!
All posts/responses based on Access 2003/2007