• SELECT

    StandingOrderLine.OrderNumber,

    StandingOrderLine.LineNumber,

    StandingOrderHeader.OrderTotal,

    StandingOrderPayment.PaymentAmount

    FROM dbo.StandingOrderLine INNER JOIN dbo.StandingOrderHeader

    ON StandingOrderLine.CompanyID = StandingOrderHeader.CompanyID

    AND StandingOrderLine.StandingOrderID = StandingOrderHeader.StandingOrderID

    INNER JOIN StandingOrderPayment

    ON StandingOrderHeader.CompanyID = StandingOrderPayment.CompanyID

    AND StandingOrderHeader.StandingOrderID = StandingOrderPayment.StandingOrderID

    WHERE StandingOrderLine.LineStatus = 'Shipped'

    There, fixed that for you. Perfectly readable. The owner or schema names don't need to be repeated in the On clause or the Select column list since they are specified in the Join clause, and some line breaks help.

    As for the Where clause, just like you did here, I always repeat the table name on purpose in the Where clause, even if it's a unique column name across the tables in the query, to help future programmers who might be looking at my code and not be completely familar with the tables. You could say "Where LineStatus = 'Shipped'" but I don't do that.