SQL update statement
I don't recommend the use of a FROM clause with UPDATE, as it is non-standard SQL.  Neither Oracle nor MySQL supports UPDATE … FROM ….  PostgreSQL does support FROM, but the documentation states that it is a PostgreSQL extension.  Even worse, it interprets the FROM clause differently from Microsoft SQL Server!  (PostgreSQL treats the Item i in the FROM clause as a self-join with the Item table in the main clause of the UPDATE; SQL Server treats it as an alias of the same table.)

I suggest using a Common Table Expression to reduce the redundancy.  CTEs with UPDATE are still non-standard, but at least PostgreSQL and SQL Server interpret the query in the same way.

WITH ItemsForEstimate AS (
    SELECT ItemID
        FROM Item
            INNER JOIN BidItem
                ON BidItem.BidItemID = Item.BidItemID
            INNER JOIN [Group]
                ON [Group].GroupID = BidItem.GroupID
        WHERE EstimateID = @EstimateID
)
UPDATE Item SET AttachementID = NULL
    WHERE
        ItemID IN (SELECT ItemID FROM ItemsForEstimate)
        AND AttachementID NOT IN (SELECT ItemID FROM ItemsForEstimate);


Since GROUP is an SQL keyword, it should be quoted as an identifier.  (I'm surprised that your query worked at all.)

AttachementID should be spelled AttachmentID.