• Here are several suggestions -

    --SELECT @From = COALESCE(@From, Min(QuotationDate)),

    -- @To = COALESCE(@To , Max(QuotationDate))

    --FROM dbo.Quotation;

    --DECLARE @F_Loc DateTime = @From,

    -- @T_Loc DateTime = @To;

    -- DECLARE @CutOffDate DateTime = DATEADD(MONTH, -3, CURRENT_TIMESTAMP);

    SELECT QU.QuotationId,

    ISNULL(QUIC.Next_Follow_Up, 0)

    FROM dbo.Quotation QU

    OUTER APPLY (

    SELECT TOP 1 Next_Follow_Up

    FROM Quotation.Follow_Up f

    WHERE f.QuotationId = QU.QuotationId

    ORDER BY Id DESC

    ) QUIC

    WHERE ((@From IS NULL OR QU.QuotationDate > @From) OR QUIC.Next_Follow_Up > 0)

    AND (@To IS NULL OR QU.QuotationDate <= @To)

    ORDER BY QU.QuotationId DESC;

    “Write the query the simplest way. If through testing it becomes clear that the performance is inadequate, consider alternative query forms.” - Gail Shaw

    For fast, accurate and documented assistance in answering your questions, please read this article.
    Understanding and using APPLY, (I) and (II) Paul White
    Hidden RBAR: Triangular Joins / The "Numbers" or "Tally" Table: What it is and how it replaces a loop Jeff Moden