Q:

Magento 2.3.1 : Add addition column in sales_order table using db_schema

How to add addition column in sales_order table using db_schema or in Magento2.3.1 best way?

A:

Create a new module depending on Magento_Sales and create a db_schema.xml file to declare the to be created a column in it. Once it is declared, generate the db_schema_whitelist.json file and run setup:upgrade. (db_schema.xml file is introduced in magento2.3 to run DB command to create, update tables and columns and keys. There is no need not for setup install scripts for a table but yes to populate columns you still need to use the old methodology of setup upgradeSchema)
etc/module.xml
<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:Module/etc/module.xsd">
<module name="FirstVendor_FirstModule"  setup_version="1.1.12" />
 <sequence>
        <module name="Magento_Sales"/>
 </sequence>

registration.php
use \Magento\Framework\Component\ComponentRegistrar;

ComponentRegistrar::register(ComponentRegistrar::MODULE, 'FirstVendor_FirstModule', __DIR__);

etc/db_schema.xml
<schema xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xsi:noNamespaceSchemaLocation="urn:magento:framework:Setup/Declaration/Schema/etc/schema.xsd">
    <table name="sales_order" resource="default" engine="innodb">
        <column xsi:type="varchar" name="custom_column" length="100" unsigned="false" nullable="false" identity="false"
                 comment="Custom Name"/>
    </table>
</schema>

Finally, run this below command to generate whitelist (Even though it's not mandatory. Without this, it will create column too but as a standard approach recommended.)
php bin/magento setup:db-declaration:generate-whitelist

Once above command is executed, run the setup:upgrade to make it in effect. 
php bin/magento setup:upgrade

Let me know if this helps. 

