If objects are in the same schema, granting access on one object implicitly grants access to dependent objects.
For example, if a procedure queries a table, granting EXECUTE on that procedure implicitly grants SELECT on the table, since it is necessary for the SP to complete. This only works if all objects are in the same schema.