Hi Rui,
It's difficult to diagnose your problem without a reproducible example.
Your syntax looks like it should do the job:
library(dplyr)
#>
#> Attaching package: 'dplyr'
#> The following objects are masked from 'package:stats':
#>
#> filter, lag
#> The following objects are masked from 'package:base':
#>
#> intersect, setdiff, setequal, union
dat <-
tibble(id = 1:3,
name = c("Andy", "Bob", "Charlie"))
left_join(dat, dat, by = "id", suffix = c("_lhs", "_rhs"))
#> # A tibble: 3 × 3
#> id name_lhs name_rhs
#> <int> <chr> <chr>
#> 1 1 Andy Andy
#> 2 2 Bob Bob
#> 3 3 Charlie Charlie
Created on 2023-05-17 with reprex v2.0.2