system and user_defined attribute properties are different and do different jobs. In the database, system attribute property save in is_system column and user_defined attribute property save in is_user_defined column.
Especially, system attribute property is only used for Customer entity (customer_eav_attribute table) while user_defined is used for all entities (eav_attribute table).
You can check prefix attribute, which has system value is 0 and user_defined value is 0 to confirm 'system' = 0 does not mean the attribute is 'user_defined'.
Magento uses system attribute property to define whether an attribute is a custom attribute or system attribute.
While Magento uses user_defined attribute property to define whether an attribute is an attribute defined by the user or system attribute (not the system attribute property mentioned above).
See how Magento uses both system (isSystem()) and user_defined (isUserDefined()) attribute properties in vendor/magento/module-sales/Block/Adminhtml/Order/View/Info.php, method getCustomerAccountData().
See how Magento uses system attribute property in:
- vendor/magento/module-sales/Block/Adminhtml/Order/View/Info.php, method
getCustomerAccountData().
- vendor/magento/module-customer/Model/Metadata/CustomerMetadata.php, method
getCustomAttributesMetadata.
- vendor/magento/module-customer/Model/Metadata/AddressMetadata.php, method
getCustomAttributesMetadata().
See how Magento uses user_defined attribute property in:
- vendor/magento/module-sales/Block/Adminhtml/Order/View/Info.php, method
getCustomerAccountData().
- vendor/magento/module-checkout/Model/DefaultConfigProvider.php, method
getAddressFromData.
- vendor/magento/module-customer/Controller/Account/CreatePost.php, method
extractAddress().
- vendor/magento/module-customer/Model/Metadata/Form.php, method
getUserAttributes and getSystemAttributes.
- vendor/magento/module-customer/Controller/Account/CreatePost.php, method
extractAddress().