Это называется коллапс маржи. Когда верхнее и нижнее поле соприкасаются друг с другом, поля объединяются в большее из двух значений.
Причина, по которой он работает "правильно", когда вы добавляете границу, заключается в том, что вы создали разделитель в 1 пиксель для полей, чтобы они больше не сворачивались. Интересно, что если вы вместо этого добавите пустой div без высоты / границ, поля все равно будут сжиматься, потому что div занимает пространство 0px.