diff --git a/addons/delivery/models/sale_order.py b/addons/delivery/models/sale_order.py
index af54241038d21ae71d059d5006d64647ae8e99f9..b486e5fc82a64e77f437b9de50be3a4045ae068b 100644
--- a/addons/delivery/models/sale_order.py
+++ b/addons/delivery/models/sale_order.py
@@ -61,6 +61,10 @@ class SaleOrder(models.Model):
 
         for order in self:
             order.carrier_id = carrier.id
+            if order.state in ('sale', 'done'):
+                pending_deliveries = order.picking_ids.filtered(
+                    lambda p: p.state not in ('done', 'cancel') and not any(m.origin_returned_move_id for m in p.move_lines))
+                pending_deliveries.carrier_id = carrier.id
             order._create_delivery_line(carrier, amount)
         return True
 
diff --git a/addons/delivery/tests/test_delivery_stock_move.py b/addons/delivery/tests/test_delivery_stock_move.py
index f9c7e2929c85bfbde76e2729871814f4d26c334e..b97f845fbda6730c806994e21e852101b7cb3c54 100644
--- a/addons/delivery/tests/test_delivery_stock_move.py
+++ b/addons/delivery/tests/test_delivery_stock_move.py
@@ -185,3 +185,57 @@ class StockMoveInvoice(AccountTestInvoicingCommon):
         choose_delivery_carrier.button_confirm()
 
         self.assertEqual(so.invoice_status, 'no', 'The status should still be "Nothing To Invoice"')
+
+    def test_delivery_carrier_from_confirmed_so(self):
+        """Test if adding shipping method in sale order after confirmation
+           will add it in pickings too"""
+
+        sale_order = self.SaleOrder.create({
+            "partner_id": self.partner_18.id,
+            "partner_invoice_id": self.partner_18.id,
+            "partner_shipping_id": self.partner_18.id,
+            "order_line": [(0, 0, {
+                "name": "Cable Management Box",
+                "product_id": self.product_cable_management_box.id,
+                "product_uom_qty": 2,
+                "product_uom": self.product_uom_unit.id,
+                "price_unit": 750.00,
+            })],
+        })
+
+        sale_order.action_confirm()
+        sale_order.picking_ids.move_lines.quantity_done = 2
+        sale_order.picking_ids.button_validate()
+
+        # Return picking
+        return_form = Form(self.env["stock.return.picking"].with_context(active_id=sale_order.picking_ids.id, active_model="stock.picking"))
+        return_wizard = return_form.save()
+        action = return_wizard.create_returns()
+        return_picking = self.env["stock.picking"].browse(action["res_id"])
+
+        # add new product so new picking is created
+        sale_order.write({
+            "order_line": [(0, 0, {
+                "name": "Another product to deliver",
+                "product_id": self.product_11.id,
+                "product_uom_qty": 2,
+                "product_uom": self.product_uom_unit.id,
+                "price_unit": 750.00,
+            })],
+        })
+
+        # Add delivery cost in Sales order
+        delivery_wizard = Form(self.env["choose.delivery.carrier"].with_context({
+            "default_order_id": sale_order.id,
+            "default_carrier_id": self.normal_delivery.id,
+        }))
+        choose_delivery_carrier = delivery_wizard.save()
+        choose_delivery_carrier.button_confirm()
+
+        # Check the carrier in picking after confirm sale order
+        delivery_for_product_11 = sale_order.picking_ids.filtered(lambda p: self.product_11 in p.move_lines.product_id)
+        self.assertEqual(delivery_for_product_11.carrier_id, self.normal_delivery, "The shipping method should be set in pending deliveries.")
+
+        done_delivery = sale_order.picking_ids.filtered(lambda p: p.state == "done")
+        self.assertFalse(done_delivery.carrier_id.id, "The shipping method should not be set in done deliveries.")
+        self.assertFalse(return_picking.carrier_id.id, "The shipping method should not set in return pickings")