You need to check below code in your checkout template file i.e billing.phtml
getAddress()->getId() ?>" id="billing:address_id" />
Then checked the saveBilling method in your onepage checkout controller for
$customerAddressId = $this->getRequest()->getPost('billing_address_id', false);
make false to true and check.
Remeber you need to override the controller for this method.
Do not modify core controller.
Overwrite:
vendor/magento/module-checkout/view/frontend/web/template/billing-address.html
in your custom theme:
app/design/frontend/<customTheme>/<customTheme>/Magento_Checkout/web/template/billing-address.html
And remove:
<div class="billing-address-same-as-shipping-block field choice" data-bind="visible: canUseShippingAddress()">
<input type="checkbox" name="billing-address-same-as-shipping"
data-bind="checked: isAddressSameAsShipping, click: useShippingAddress, attr: {id: 'billing-address-same-as-shipping-' + getCode($parent)}"/>
<label data-bind="attr: {for: 'billing-address-same-as-shipping-' + getCode($parent)}"><span
data-bind="i18n: 'My billing and shipping address are the same'"></span></label>
</div>
So the overwritten file should be like this:
<div class="checkout-billing-address">
<!-- ko template: 'Magento_Checkout/billing-address/details' --><!-- /ko -->
<fieldset class="fieldset" data-bind="visible: !isAddressDetailsVisible()">
<!-- ko template: 'Magento_Checkout/billing-address/list' --><!-- /ko -->
<!-- ko template: 'Magento_Checkout/billing-address/form' --><!-- /ko -->
<div class="actions-toolbar">
<div class="primary">
<button class="action action-update" type="button" data-bind="click: updateAddress">
<span data-bind="i18n: 'Update'"></span>
</button>
<button class="action action-cancel" type="button" data-bind="click: cancelAddressEdit">
<span data-bind="i18n: 'Cancel'"></span>
</button>
</div>
</div>
</fieldset>
UPDATE:
In later versions of Magento, keeping line
<render args="detailsTemplate"/>
prior to
<fieldset class="fieldset" data-bind="visible: !isAddressDetailsVisible()">
is important to retain the functionality.
Best Answer
After looking at the tutorial my guess is that this attribute is set as required when creating the attribute in the setup script.
In Magento an address is simply an address if it is a shipping or billing magento does not really care on the customer address level, so if this attribute is required you would need to add it to both the shipping and billing address forms.