Hi Nicolas, Jerome,
sorry I'm unable to give you a live test website at this time, though I think I was able to trace the issue down.
In short: it's caused by addresses stored in the database with all values NULL and address_user_id equal to zero.
For guest users somehow the cart_billing_address_id and cart_shipping_address_id will get stuck at these NULL addresses, and doesn't handle the situation of address_user_id = 0 properly.
Longer explanation:
The reason why in the checkout the addresses are not automatically selected for guests, is because in the file show_block_address on line 151
if($cart->cart_billing_address_id == (int)$address->address_id)
apparently isn't true.
When printing the address_id's on the frontend I see for guests the
$cart->cart_billing_address_id was for example 1643. When looking up this address_id 1643 in the database, I see it corresponds with an address with all values NULL and address_user_id = 0. Not sure why, but our database contains a few of these NULL addresses.
When the system retrieves the
$cart->cart_billing_address_id, somehow it gets stuck at the most recent NULL address. Manually changing the address_user_id to anything other than zero and going back to the checkout, the $cart->cart_billing_address_id and cart_shipping_address_id will then take the next highest NULL address in the database (instead of 1643, will then be next NULL address, could be for example row 1259).
I haven't delved into all the code to figure out exactly why these
address_user_id = 0 situations are not handled correctly, but would you be able to fix it with this information?
You can try manually inserting/modifying an address in the database (0, NULL, NULL, NULL, ...) to see/reproduce the issue.
For any other readers with the same problem of having orders without any address, a quick fix for now would be to remove all NULL addresses from your database table
_hikashop_address.