I think this is true.
A NetID allows you to issue DevAddrs your “own” range, allowing for early exit in routing. If you don’t have a NetID, you’re supposed to use 0 or 1 for testing, but everybody is doing that. This means that your network needs to check your database to see if it knows the device, and if so, doing a MIC check to see if you have the network session key.
There’s not really a functional difference between private and public networks. For roaming, you’ll need a NetID. A NetID allocation requires Contributor membership with the LoRa Alliance.