The reason is that you avoid ownership chain problems. Where Mary owns an object, Fred can read the object and then he creates a proc and he gives permission to Tom to execute. But Tom cannot because there is a product chain of ownership.
CREATE PROCEDURE [Adam Cogan].[Sales by Year]@Beginning_Date DateTime,@Ending_Date DateTime ASSELECT Orders.ShippedDate,Orders.OrderID,"vwOrderSubTotals".Subtotal,DATENAME(yy,ShippedDate) AS YearFROM OrdersINNER JOIN "vwOrderSubTotals"ON Orders.OrderID = "vwOrderSubTotals".OrderIDWHERE Orders.ShippedDate Between @Beginning_Date And @Ending_Date
❌ Figure: Bad Example
CREATE PROCEDURE [dbo].[Sales by Year]@Beginning_Date DateTime,@Ending_Date DateTime ASSELECT Orders.ShippedDate,Orders.OrderID,"vwOrderSubTotals".Subtotal,DATENAME(yy,ShippedDate) AS YearFROM OrdersINNER JOIN "vwOrderSubTotals"ON Orders.OrderID = "vwOrderSubTotals".OrderIDWHERE Orders.ShippedDate Between @Beginning_Date And @Ending_Date
✅ Figure: Good Example