@wire
decorated methods like getRecord
are calling the server to retrieve data. If the component's rendering waited until it was resolved, that would result in a poor user experience that would see nothing while the server calls were processed and returned back to the client. The user wouldn't know if an error has occurred or if they just need to wait a bit.
That's the 'why'
It is precisely because it behaves this way that you can render a loading UI in your component so that the user knows that they just need to hold on while data loads.
A common pattern for this you'll see in many components goes something like this:
<template if:true={wiredRecord.data}>
<!-- stuff to show your wired record data -->
</template>
<template if:false={wiredRecord.data}>
<lightning-spinner></lightning-spinner>
</template>
<template if:true={wiredRecord.error}>
<!-- display error message -->
</template>