Nearly the same answer as VKP for the COUNT(*) over but I prefer it as a common table expression.
;WITH cte AS (
SELECT
*
,COUNT(*) OVER (PARTITION BY AddressLine) as RecordsAtAddress
FROM
TableName
)
SELECT *
FROM
cte
WHERE
RecordsAtAddress = 1
However, I did want to add ROW_NUMBER window function to show you how you can always select a record per AddressLine. So in this case you would get 1 of the duplicate records instead of excluding them all together.
;WITH cte AS (
SELECT *
,ROW_NUMBER() OVER (PARTITION BY AddressLine ORDER BY CName) as RowNum
FROM
TableName
)
SELECT *
FROM
cte
WHERE
RowNum = 1
Be Vary Cautious of using IN or NOT IN especially with free form text like this because if AddressLine can be NULL you will NOT get what you expect! Also performance is typically not as good. NOT IN vs NOT EXISTS
For the EXISTS or NOT EXISTS answer you will actually have to relate your sub query something like this, note NOT EXISTS may perform better for a case like this:
SELECT *
FROM
TableName t1
WHERE
NOT EXISTS (SELECT
t2.AddressLine
FROM
TableName t2
WHERE
t1.AddressLine = t2.AddressLine
GROUP BY
t2.AddressLine
HAVING COUNT(*) > 1)