If you want to stick with if_else(), you need to specify the appropriate NA constant to be used (the default NA is of type logical). Since the vector you are operating on is of type double, you would use NA_real_.
library(dplyr, warn.conflicts = FALSE)
df <- tibble(mycol = c(0, 0, 0, 0, 0, 89, 90, 0, 123))
df %>% mutate(mycol = if_else(mycol == 0, NA_real_, mycol))
#> # A tibble: 9 x 1
#> mycol
#> <dbl>
#> 1 NA
#> 2 NA
#> 3 NA
#> 4 NA
#> 5 NA
#> 6 89
#> 7 90
#> 8 NA
#> 9 123
Created on 2020-05-07 by the reprex package (v0.3.0)