In the x86-64 Tour of Intel Manuals, I read
Perhaps the most surprising fact is that an instruction such as
MOV EAX, EBXautomatically ze
It simply saves space in the instructions, and the instruction set. You can move small immediate values to a 64-bit register by using existing (32-bit) instructions.
It also saves you from having to encode 8 byte values for MOV RAX, 42, when MOV EAX, 42 can be reused.
This optimization is not as important for 8 and 16 bit ops (because they are smaller), and changing the rules there would also break old code.