Quick single scan solution
😎
USE tempdb;
GO
SET NOCOUNT ON;
WITH XSAMPLE(book, position) AS
(SELECT * FROM (VALUES
('A', 500)
,('B',-500)
,('C',-500)
) AS X(book, position))
,BALANCE_STUFF AS
(
SELECT
XS.book
,XS.position
,SUM(XS.position) OVER
(
PARTITION BY (SELECT NULL)
ORDER BY XS.book
ROWS BETWEEN UNBOUNDED PRECEDING
AND CURRENT ROW
) AS RT_BALANCE
FROM XSAMPLE XS
)
SELECT
BS.book
,BS.position
FROM BALANCE_STUFF BS
WHERE BS.RT_BALANCE <> 0;