Oui, c'est une fonctionnalité de CSS, qu'on appelle fusion/transfert de marges (margin collapse/transfer).
Cet article l'explique plutôt bien: http://www.howtocreate.co.uk/tutor [...] collapsing
Dans ton cas, la marge en haut de l'élément <h2> ainsi que marge en bas de l'élément <h1> est transféré à l'élément <body>, au lieu d'être utilisé pour élargir le contenu du <div> contenant <h1> et <h2>, transfert, qui n'est pas fait s'il y a une bordure (comme décrit dans la spec CSS: http://www.w3.org/TR/CSS2/box.html#collapsing-margins )
L'idée derrière ça, c'est lorsqu'on a 2 paragraphes qui se suivent <p/><p/>, plutôt que d'avoir une marge entre ces 2 paragraphes qui est la somme des marges mitoyennes, on prends le maximum à la place (ça c'est la fusion de marge).
Le transfert, c'est pour prendre en compte les cas comme: <div><p/></div><p/>. Si le <div> n'a aucun style appliqué, il ne devrait avoir aucune influence sur le rendu, pourtant sans transfert de marge, l'espace entre les 2 paragraphes sera la somme des marges mitoyenne. Pour éviter ça, CSS transfert les marges dans l'éléments le plus englobant (certaines conditions s'appliquent™).