Это нормальное поведение (по крайней мере, среди реализаций браузера). Маржа не влияет на положение ребенка по отношению к ее родительскому объекту, если только родительский элемент не имеет дополнения, и в этом случае большинство браузеров затем добавят к нему дочерние поля.
Чтобы получить нужное поведение, вы need:
.child {
margin-top: 0;
}
.parent {
padding-top: 10px;
}