This is from wiki:
At the very moment of establishing a hierarchical relationship between
objects (parenting), the transformation coordinates of the child
object remain unchanged, and yet this object doesn't change its global
transforms visually (location, orientation or scale), though its
reference "world" has changed from global origin (zero transforms) to
the global transforms of the parent.
Origin of unparented objects is the global origin: global (0,0,0)
location, zero rotation, and unity scale. After being parented, the
new origin should be that of the parent. And it is. But a correction
matrix is applied to the child, so that the new reference point is not
the global transforms of the parent, but the global origin. This
correction matrix is applied to the global transforms of the parent
before applying them to the child.
This correction matrix called Parent Inverse
You can do this operations with Parent Inverse:
Alt + O (clear origin) - this operation clears Parent Inverse and makes object go to the parent location.
Ctrl + Shift + P (Make parent without Inverse) - it's like what you do in properties -> object -> Relations: Parent. Or like Ctrl + P and Alt + O and Alt + P Clear Parent Inverse in one comand
Alt + P Clear Parent Inverse - Like Alt + O but for rotation and Scale.
Why Blender using Parent Inverse?
Let's try 2 objects with Parent Inverse:
As you see, transform matrix, applied on parent object without inverse, makes child object distorted. If you want this effect - you are welcome, but mostly, we don't want it