buenas...
lo que sucede es normal porque -aunque parezca irracional- el elemento <body> realmente no cubre todo el area visible (viewport) del navegador. es irracional porque -por ejemplo- se entenderia que al aplicar un fondo no deberia cubrir todo el viewport sino solo al elemento en si. lo cierto es que no es el caso, el fondo se aplica en todo el viewport. nunca he entendido la razon de esto, quizas sea requisito del estandar CSS. en fin, para lograr lo que requieres debes aplicar el estilo al elemento <html>. en lugar de
body, utiliza
documentElement.