I think so. They only stop being equivalent when you have them inside type parameters (which are invariant):
julia> struct Wrapper{T}; a :: T; end
julia> f(x :: Wrapper{Real}) = x.a
f (generic function with 1 method)
julia> g(x :: Wrapper{T}) where {T<:Real} = x.a
g (generic function with 1 method)
julia> x1 = Wrapper{Real}(1.0)
Wrapper{Real}(1.0)
julia> x2 = Wrapper{Float64}(1.0)
Wrapper{Float64}(1.0)
julia> f(x1)
1.0
julia> f(x2)
ERROR: MethodError: no method matching f(::Wrapper{Float64})
Closest candidates are:
f(::Wrapper{Real}) at REPL[2]:1
Stacktrace:
[1] top-level scope at REPL[7]:1
julia> g(x1)
1.0
julia> g(x2)
1.0
In this case the short way to write g would be:
julia> h(x :: Wrapper{<:Real}) = x.a
h (generic function with 1 method)
julia> h(x1)
1.0
julia> h(x2)
1.0