You don't mention what version of PostgreSQL/PostGIS you are using. The KNN nearest neighbor operators have improved greatly over recent years
https://postgis.net/docs/geometry_distance_knn.html
So I believe you are just looking for the nearest neighbor road to each lake.
SELECT
a.lake_id
,a.nearest_street_id
,ST_Distance(
ST_Transform(a.geom,4326)::geography
,ST_Transform(b.geom,4326)::geography
) / 1000 AS distance_km
FROM (
SELECT
a.lake_id
,a.geom
,(
SELECT
bb.street_id
FROM
street bb
ORDER BY
bb.geom <-> aa.geom
LIMIT 1
) AS nearest_street_id
FROM
lake aa
) a
JOIN
street b
ON
a.nearest_street_id = b.street_id;
This will work with 9.5 and greater and PostGIS 2.2. You can do similar things with earlier KNN versions - using <#> after 9.1 but its more work to batch and then inspect the batch for the nearest.
Note in cases where the distance is exactly the same, you just get whichever one comes up first in the limit.
Edit: Note you can try the lateral trick as well though in my testing I get very similar performance results
SELECT
a.lake_id
,b.nearest_street_id
,ST_Distance(
ST_Transform(a.geom,4326)::geography
,ST_Transform(b.geom,4326)::geography
) / 1000 AS distance_km
FROM
lake a
CROSS JOIN LATERAL (
SELECT
bb.street_id AS nearest_street_id
,bb.geom
FROM
street bb
ORDER BY
bb.geom <-> a.geom
LIMIT 1
) b
Cheers,
Paul
EXPLAIN ANALYZE SELECT [...]